@uipath/apollo-react 6.21.0 → 6.22.1

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 (39) hide show
  1. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.cjs +253 -0
  2. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.d.ts +8 -0
  3. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.d.ts.map +1 -0
  4. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.js +213 -0
  5. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.types.cjs +18 -0
  6. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.types.d.ts +28 -0
  7. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.types.d.ts.map +1 -0
  8. package/dist/canvas/components/CanvasBottomPanel/CanvasBottomPanel.types.js +0 -0
  9. package/dist/canvas/components/CanvasBottomPanel/index.cjs +42 -0
  10. package/dist/canvas/components/CanvasBottomPanel/index.d.ts +3 -0
  11. package/dist/canvas/components/CanvasBottomPanel/index.d.ts.map +1 -0
  12. package/dist/canvas/components/CanvasBottomPanel/index.js +2 -0
  13. package/dist/canvas/components/StageNode/StageNodeHeader.cjs +10 -5
  14. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -1
  15. package/dist/canvas/components/StageNode/StageNodeHeader.js +11 -6
  16. package/dist/canvas/components/StageNode/formatDuration.cjs +18 -2
  17. package/dist/canvas/components/StageNode/formatDuration.d.ts +2 -0
  18. package/dist/canvas/components/StageNode/formatDuration.d.ts.map +1 -1
  19. package/dist/canvas/components/StageNode/formatDuration.js +11 -1
  20. package/dist/canvas/components/StageNode/rules/StageRuleContent.cjs +5 -14
  21. package/dist/canvas/components/StageNode/rules/StageRuleContent.d.ts.map +1 -1
  22. package/dist/canvas/components/StageNode/rules/StageRuleContent.js +5 -14
  23. package/dist/canvas/components/StageNode/shared/CollapsibleStageHeader.cjs +5 -14
  24. package/dist/canvas/components/StageNode/shared/CollapsibleStageHeader.d.ts.map +1 -1
  25. package/dist/canvas/components/StageNode/shared/CollapsibleStageHeader.js +5 -14
  26. package/dist/canvas/components/StageNode/tasks/TaskContent.cjs +29 -28
  27. package/dist/canvas/components/StageNode/tasks/TaskContent.js +30 -29
  28. package/dist/canvas/components/index.cjs +59 -52
  29. package/dist/canvas/components/index.d.ts +1 -0
  30. package/dist/canvas/components/index.d.ts.map +1 -1
  31. package/dist/canvas/components/index.js +1 -0
  32. package/dist/canvas/layouts/Stack.cjs +22 -6
  33. package/dist/canvas/layouts/Stack.d.ts +3 -4
  34. package/dist/canvas/layouts/Stack.d.ts.map +1 -1
  35. package/dist/canvas/layouts/Stack.js +13 -7
  36. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  37. package/dist/test/durations.d.ts +6 -0
  38. package/dist/test/durations.d.ts.map +1 -0
  39. package/package.json +3 -3
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT: ()=>CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT,
28
+ CanvasBottomPanel: ()=>CanvasBottomPanel_CanvasBottomPanel,
29
+ CanvasBottomPanelActions: ()=>CanvasBottomPanelActions
30
+ });
31
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
32
+ const external_react_namespaceObject = require("react");
33
+ const external_react_dom_namespaceObject = require("react-dom");
34
+ const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
35
+ const CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT = 48;
36
+ const CanvasBottomPanelActionsContext = /*#__PURE__*/ (0, external_react_namespaceObject.createContext)(null);
37
+ function CanvasBottomPanelActions({ children }) {
38
+ const slot = (0, external_react_namespaceObject.useContext)(CanvasBottomPanelActionsContext);
39
+ if (!slot?.active || !slot.container) return null;
40
+ return /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(children, slot.container);
41
+ }
42
+ function ActionsScope({ active, container, children }) {
43
+ const value = (0, external_react_namespaceObject.useMemo)(()=>({
44
+ active,
45
+ container
46
+ }), [
47
+ active,
48
+ container
49
+ ]);
50
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(CanvasBottomPanelActionsContext.Provider, {
51
+ value: value,
52
+ children: children
53
+ });
54
+ }
55
+ function shouldSeparateTabs(previous, current) {
56
+ if (!previous) return false;
57
+ if (!previous.group && !current.group) return false;
58
+ return previous.group !== current.group;
59
+ }
60
+ function clearNativeSelection() {
61
+ if ("u" < typeof window || 'function' != typeof window.getSelection) return;
62
+ window.getSelection()?.removeAllRanges();
63
+ }
64
+ const CanvasBottomPanel_CanvasBottomPanel = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ tabs, activeTabId, onTabChange, isCollapsed, onCollapsedChange, onExpand, tabsTrailingSlot, headerActions, overlay, variant = 'floating', collapsedHeight = CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, idPrefix, className }) {
65
+ const generatedId = (0, external_react_namespaceObject.useId)();
66
+ const resolvedIdPrefix = idPrefix ?? `canvas-bottom-panel-${generatedId}`;
67
+ const tabRefs = (0, external_react_namespaceObject.useRef)(new Map());
68
+ const [actionsContainer, setActionsContainer] = (0, external_react_namespaceObject.useState)(null);
69
+ const [overlayHost, setOverlayHost] = (0, external_react_namespaceObject.useState)(null);
70
+ const overlayActive = overlay?.tabIds.includes(activeTabId) ?? false;
71
+ const overlayLabelTabId = overlayActive ? activeTabId : tabs.find((tab)=>overlay?.tabIds.includes(tab.id))?.id;
72
+ const focusTab = (0, external_react_namespaceObject.useCallback)((tabId)=>{
73
+ requestAnimationFrame(()=>{
74
+ tabRefs.current.get(tabId)?.focus();
75
+ });
76
+ }, []);
77
+ const activateTab = (0, external_react_namespaceObject.useCallback)((tabId)=>{
78
+ clearNativeSelection();
79
+ onTabChange(tabId);
80
+ if (isCollapsed) if (onCollapsedChange) onCollapsedChange(false);
81
+ else onExpand?.();
82
+ }, [
83
+ isCollapsed,
84
+ onCollapsedChange,
85
+ onExpand,
86
+ onTabChange
87
+ ]);
88
+ const handleKeyDown = (0, external_react_namespaceObject.useCallback)((event, index)=>{
89
+ if (0 === tabs.length) return;
90
+ let nextIndex;
91
+ switch(event.key){
92
+ case 'ArrowRight':
93
+ nextIndex = (index + 1) % tabs.length;
94
+ break;
95
+ case 'ArrowLeft':
96
+ nextIndex = (index - 1 + tabs.length) % tabs.length;
97
+ break;
98
+ case 'Home':
99
+ nextIndex = 0;
100
+ break;
101
+ case 'End':
102
+ nextIndex = tabs.length - 1;
103
+ break;
104
+ default:
105
+ return;
106
+ }
107
+ event.preventDefault();
108
+ const nextTab = tabs[nextIndex];
109
+ if (!nextTab) return;
110
+ activateTab(nextTab.id);
111
+ focusTab(nextTab.id);
112
+ }, [
113
+ activateTab,
114
+ focusTab,
115
+ tabs
116
+ ]);
117
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("section", {
118
+ "data-testid": "canvas-bottom-panel",
119
+ className: (0, apollo_wind_namespaceObject.cn)('flex min-h-0 flex-col overflow-hidden bg-surface-raised text-foreground', 'floating' === variant && 'rounded-2xl border border-border-subtle shadow-lg', className),
120
+ style: isCollapsed ? {
121
+ height: collapsedHeight
122
+ } : void 0,
123
+ children: [
124
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("header", {
125
+ className: "flex shrink-0 items-center justify-between gap-3 px-3",
126
+ style: {
127
+ height: collapsedHeight
128
+ },
129
+ children: [
130
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
131
+ className: "flex min-w-0 items-center gap-2",
132
+ children: [
133
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
134
+ role: "tablist",
135
+ "aria-orientation": "horizontal",
136
+ className: "flex min-w-0 items-center gap-1 overflow-x-auto",
137
+ children: tabs.map((tab, index)=>{
138
+ const isActive = tab.id === activeTabId;
139
+ const isSelected = !isCollapsed && isActive;
140
+ const controlsOverlay = overlay?.tabIds.includes(tab.id) ?? false;
141
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_react_namespaceObject.Fragment, {
142
+ children: [
143
+ shouldSeparateTabs(tabs[index - 1], tab) && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
144
+ role: "presentation",
145
+ "aria-hidden": "true",
146
+ className: "mx-1.5 h-4 w-px shrink-0 bg-border-subtle",
147
+ "data-testid": "canvas-bottom-panel-tab-separator"
148
+ }),
149
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("button", {
150
+ ref: (node)=>{
151
+ if (node) tabRefs.current.set(tab.id, node);
152
+ else tabRefs.current.delete(tab.id);
153
+ },
154
+ id: `${resolvedIdPrefix}-tab-${tab.id}`,
155
+ type: "button",
156
+ role: "tab",
157
+ "aria-label": tab.ariaLabel,
158
+ "aria-selected": isSelected,
159
+ "aria-controls": controlsOverlay ? `${resolvedIdPrefix}-overlay-tabpanel` : `${resolvedIdPrefix}-tabpanel-${tab.id}`,
160
+ tabIndex: isActive ? 0 : -1,
161
+ "data-state": isSelected ? 'active' : 'inactive',
162
+ className: "inline-flex h-7 shrink-0 cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-lg px-2.5 text-xs font-medium text-foreground-muted transition-colors hover:bg-surface-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-surface-overlay data-[state=active]:text-foreground",
163
+ onClick: ()=>activateTab(tab.id),
164
+ onKeyDown: (event)=>handleKeyDown(event, index),
165
+ children: tab.label
166
+ })
167
+ ]
168
+ }, tab.id);
169
+ })
170
+ }),
171
+ tabsTrailingSlot && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
172
+ className: "shrink-0",
173
+ "data-testid": "canvas-bottom-panel-tabs-trailing-slot",
174
+ children: tabsTrailingSlot
175
+ })
176
+ ]
177
+ }),
178
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
179
+ className: "flex shrink-0 items-center gap-1",
180
+ children: [
181
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
182
+ ref: setActionsContainer,
183
+ className: "flex items-center gap-1 empty:hidden",
184
+ "data-testid": "canvas-bottom-panel-tab-actions"
185
+ }),
186
+ headerActions && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
187
+ className: "flex items-center gap-1",
188
+ "data-testid": "canvas-bottom-panel-actions",
189
+ children: headerActions
190
+ })
191
+ ]
192
+ })
193
+ ]
194
+ }),
195
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
196
+ className: "min-h-0 flex-1 border-t border-border-subtle",
197
+ style: {
198
+ display: isCollapsed ? 'none' : 'block'
199
+ },
200
+ "data-testid": "canvas-bottom-panel-content",
201
+ children: [
202
+ tabs.map((tab)=>{
203
+ const isActive = tab.id === activeTabId;
204
+ if (overlay?.tabIds.includes(tab.id)) return null;
205
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
206
+ id: `${resolvedIdPrefix}-tabpanel-${tab.id}`,
207
+ role: "tabpanel",
208
+ "aria-labelledby": `${resolvedIdPrefix}-tab-${tab.id}`,
209
+ hidden: !isActive,
210
+ className: "h-full w-full",
211
+ style: {
212
+ display: isActive ? 'block' : 'none'
213
+ },
214
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(ActionsScope, {
215
+ active: !isCollapsed && isActive,
216
+ container: actionsContainer,
217
+ children: tab.content
218
+ })
219
+ }, tab.id);
220
+ }),
221
+ overlay && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
222
+ ref: setOverlayHost,
223
+ id: `${resolvedIdPrefix}-overlay-tabpanel`,
224
+ role: "tabpanel",
225
+ "aria-labelledby": overlayLabelTabId ? `${resolvedIdPrefix}-tab-${overlayLabelTabId}` : void 0,
226
+ hidden: !overlayActive,
227
+ className: "h-full w-full",
228
+ style: {
229
+ display: overlayActive ? 'block' : 'none'
230
+ },
231
+ "data-testid": "canvas-bottom-panel-overlay"
232
+ }),
233
+ overlay && overlayHost && /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(ActionsScope, {
234
+ active: !isCollapsed && overlayActive,
235
+ container: actionsContainer,
236
+ children: overlay.content
237
+ }), overlayHost)
238
+ ]
239
+ })
240
+ ]
241
+ });
242
+ });
243
+ exports.CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT = __webpack_exports__.CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT;
244
+ exports.CanvasBottomPanel = __webpack_exports__.CanvasBottomPanel;
245
+ exports.CanvasBottomPanelActions = __webpack_exports__.CanvasBottomPanelActions;
246
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
247
+ "CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT",
248
+ "CanvasBottomPanel",
249
+ "CanvasBottomPanelActions"
250
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
251
+ Object.defineProperty(exports, '__esModule', {
252
+ value: true
253
+ });
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { CanvasBottomPanelProps } from './CanvasBottomPanel.types';
3
+ export declare const CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT = 48;
4
+ export declare function CanvasBottomPanelActions({ children }: {
5
+ children: ReactNode;
6
+ }): import("react").ReactPortal | null;
7
+ export declare const CanvasBottomPanel: import("react").NamedExoticComponent<CanvasBottomPanelProps>;
8
+ //# sourceMappingURL=CanvasBottomPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasBottomPanel.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/CanvasBottomPanel/CanvasBottomPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAYvD,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,sCAI7E;AAiCD,eAAO,MAAM,iBAAiB,8DA4M5B,CAAC"}
@@ -0,0 +1,213 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Fragment, createContext, memo, useCallback, useContext, useId, useMemo, useRef, useState } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import { cn } from "@uipath/apollo-wind";
5
+ const CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT = 48;
6
+ const CanvasBottomPanelActionsContext = /*#__PURE__*/ createContext(null);
7
+ function CanvasBottomPanelActions({ children }) {
8
+ const slot = useContext(CanvasBottomPanelActionsContext);
9
+ if (!slot?.active || !slot.container) return null;
10
+ return /*#__PURE__*/ createPortal(children, slot.container);
11
+ }
12
+ function ActionsScope({ active, container, children }) {
13
+ const value = useMemo(()=>({
14
+ active,
15
+ container
16
+ }), [
17
+ active,
18
+ container
19
+ ]);
20
+ return /*#__PURE__*/ jsx(CanvasBottomPanelActionsContext.Provider, {
21
+ value: value,
22
+ children: children
23
+ });
24
+ }
25
+ function shouldSeparateTabs(previous, current) {
26
+ if (!previous) return false;
27
+ if (!previous.group && !current.group) return false;
28
+ return previous.group !== current.group;
29
+ }
30
+ function clearNativeSelection() {
31
+ if ("u" < typeof window || 'function' != typeof window.getSelection) return;
32
+ window.getSelection()?.removeAllRanges();
33
+ }
34
+ const CanvasBottomPanel_CanvasBottomPanel = /*#__PURE__*/ memo(function({ tabs, activeTabId, onTabChange, isCollapsed, onCollapsedChange, onExpand, tabsTrailingSlot, headerActions, overlay, variant = 'floating', collapsedHeight = CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, idPrefix, className }) {
35
+ const generatedId = useId();
36
+ const resolvedIdPrefix = idPrefix ?? `canvas-bottom-panel-${generatedId}`;
37
+ const tabRefs = useRef(new Map());
38
+ const [actionsContainer, setActionsContainer] = useState(null);
39
+ const [overlayHost, setOverlayHost] = useState(null);
40
+ const overlayActive = overlay?.tabIds.includes(activeTabId) ?? false;
41
+ const overlayLabelTabId = overlayActive ? activeTabId : tabs.find((tab)=>overlay?.tabIds.includes(tab.id))?.id;
42
+ const focusTab = useCallback((tabId)=>{
43
+ requestAnimationFrame(()=>{
44
+ tabRefs.current.get(tabId)?.focus();
45
+ });
46
+ }, []);
47
+ const activateTab = useCallback((tabId)=>{
48
+ clearNativeSelection();
49
+ onTabChange(tabId);
50
+ if (isCollapsed) if (onCollapsedChange) onCollapsedChange(false);
51
+ else onExpand?.();
52
+ }, [
53
+ isCollapsed,
54
+ onCollapsedChange,
55
+ onExpand,
56
+ onTabChange
57
+ ]);
58
+ const handleKeyDown = useCallback((event, index)=>{
59
+ if (0 === tabs.length) return;
60
+ let nextIndex;
61
+ switch(event.key){
62
+ case 'ArrowRight':
63
+ nextIndex = (index + 1) % tabs.length;
64
+ break;
65
+ case 'ArrowLeft':
66
+ nextIndex = (index - 1 + tabs.length) % tabs.length;
67
+ break;
68
+ case 'Home':
69
+ nextIndex = 0;
70
+ break;
71
+ case 'End':
72
+ nextIndex = tabs.length - 1;
73
+ break;
74
+ default:
75
+ return;
76
+ }
77
+ event.preventDefault();
78
+ const nextTab = tabs[nextIndex];
79
+ if (!nextTab) return;
80
+ activateTab(nextTab.id);
81
+ focusTab(nextTab.id);
82
+ }, [
83
+ activateTab,
84
+ focusTab,
85
+ tabs
86
+ ]);
87
+ return /*#__PURE__*/ jsxs("section", {
88
+ "data-testid": "canvas-bottom-panel",
89
+ className: cn('flex min-h-0 flex-col overflow-hidden bg-surface-raised text-foreground', 'floating' === variant && 'rounded-2xl border border-border-subtle shadow-lg', className),
90
+ style: isCollapsed ? {
91
+ height: collapsedHeight
92
+ } : void 0,
93
+ children: [
94
+ /*#__PURE__*/ jsxs("header", {
95
+ className: "flex shrink-0 items-center justify-between gap-3 px-3",
96
+ style: {
97
+ height: collapsedHeight
98
+ },
99
+ children: [
100
+ /*#__PURE__*/ jsxs("div", {
101
+ className: "flex min-w-0 items-center gap-2",
102
+ children: [
103
+ /*#__PURE__*/ jsx("div", {
104
+ role: "tablist",
105
+ "aria-orientation": "horizontal",
106
+ className: "flex min-w-0 items-center gap-1 overflow-x-auto",
107
+ children: tabs.map((tab, index)=>{
108
+ const isActive = tab.id === activeTabId;
109
+ const isSelected = !isCollapsed && isActive;
110
+ const controlsOverlay = overlay?.tabIds.includes(tab.id) ?? false;
111
+ return /*#__PURE__*/ jsxs(Fragment, {
112
+ children: [
113
+ shouldSeparateTabs(tabs[index - 1], tab) && /*#__PURE__*/ jsx("span", {
114
+ role: "presentation",
115
+ "aria-hidden": "true",
116
+ className: "mx-1.5 h-4 w-px shrink-0 bg-border-subtle",
117
+ "data-testid": "canvas-bottom-panel-tab-separator"
118
+ }),
119
+ /*#__PURE__*/ jsx("button", {
120
+ ref: (node)=>{
121
+ if (node) tabRefs.current.set(tab.id, node);
122
+ else tabRefs.current.delete(tab.id);
123
+ },
124
+ id: `${resolvedIdPrefix}-tab-${tab.id}`,
125
+ type: "button",
126
+ role: "tab",
127
+ "aria-label": tab.ariaLabel,
128
+ "aria-selected": isSelected,
129
+ "aria-controls": controlsOverlay ? `${resolvedIdPrefix}-overlay-tabpanel` : `${resolvedIdPrefix}-tabpanel-${tab.id}`,
130
+ tabIndex: isActive ? 0 : -1,
131
+ "data-state": isSelected ? 'active' : 'inactive',
132
+ className: "inline-flex h-7 shrink-0 cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-lg px-2.5 text-xs font-medium text-foreground-muted transition-colors hover:bg-surface-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-surface-overlay data-[state=active]:text-foreground",
133
+ onClick: ()=>activateTab(tab.id),
134
+ onKeyDown: (event)=>handleKeyDown(event, index),
135
+ children: tab.label
136
+ })
137
+ ]
138
+ }, tab.id);
139
+ })
140
+ }),
141
+ tabsTrailingSlot && /*#__PURE__*/ jsx("div", {
142
+ className: "shrink-0",
143
+ "data-testid": "canvas-bottom-panel-tabs-trailing-slot",
144
+ children: tabsTrailingSlot
145
+ })
146
+ ]
147
+ }),
148
+ /*#__PURE__*/ jsxs("div", {
149
+ className: "flex shrink-0 items-center gap-1",
150
+ children: [
151
+ /*#__PURE__*/ jsx("div", {
152
+ ref: setActionsContainer,
153
+ className: "flex items-center gap-1 empty:hidden",
154
+ "data-testid": "canvas-bottom-panel-tab-actions"
155
+ }),
156
+ headerActions && /*#__PURE__*/ jsx("div", {
157
+ className: "flex items-center gap-1",
158
+ "data-testid": "canvas-bottom-panel-actions",
159
+ children: headerActions
160
+ })
161
+ ]
162
+ })
163
+ ]
164
+ }),
165
+ /*#__PURE__*/ jsxs("div", {
166
+ className: "min-h-0 flex-1 border-t border-border-subtle",
167
+ style: {
168
+ display: isCollapsed ? 'none' : 'block'
169
+ },
170
+ "data-testid": "canvas-bottom-panel-content",
171
+ children: [
172
+ tabs.map((tab)=>{
173
+ const isActive = tab.id === activeTabId;
174
+ if (overlay?.tabIds.includes(tab.id)) return null;
175
+ return /*#__PURE__*/ jsx("div", {
176
+ id: `${resolvedIdPrefix}-tabpanel-${tab.id}`,
177
+ role: "tabpanel",
178
+ "aria-labelledby": `${resolvedIdPrefix}-tab-${tab.id}`,
179
+ hidden: !isActive,
180
+ className: "h-full w-full",
181
+ style: {
182
+ display: isActive ? 'block' : 'none'
183
+ },
184
+ children: /*#__PURE__*/ jsx(ActionsScope, {
185
+ active: !isCollapsed && isActive,
186
+ container: actionsContainer,
187
+ children: tab.content
188
+ })
189
+ }, tab.id);
190
+ }),
191
+ overlay && /*#__PURE__*/ jsx("div", {
192
+ ref: setOverlayHost,
193
+ id: `${resolvedIdPrefix}-overlay-tabpanel`,
194
+ role: "tabpanel",
195
+ "aria-labelledby": overlayLabelTabId ? `${resolvedIdPrefix}-tab-${overlayLabelTabId}` : void 0,
196
+ hidden: !overlayActive,
197
+ className: "h-full w-full",
198
+ style: {
199
+ display: overlayActive ? 'block' : 'none'
200
+ },
201
+ "data-testid": "canvas-bottom-panel-overlay"
202
+ }),
203
+ overlay && overlayHost && /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(ActionsScope, {
204
+ active: !isCollapsed && overlayActive,
205
+ container: actionsContainer,
206
+ children: overlay.content
207
+ }), overlayHost)
208
+ ]
209
+ })
210
+ ]
211
+ });
212
+ });
213
+ export { CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, CanvasBottomPanel_CanvasBottomPanel as CanvasBottomPanel, CanvasBottomPanelActions };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
@@ -0,0 +1,28 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ export interface CanvasBottomPanelTab {
3
+ id: string;
4
+ label: ReactNode;
5
+ ariaLabel?: string;
6
+ group?: string;
7
+ content: ReactNode;
8
+ }
9
+ export interface CanvasBottomPanelOverlay {
10
+ tabIds: string[];
11
+ content: ReactNode;
12
+ }
13
+ export interface CanvasBottomPanelProps {
14
+ tabs: CanvasBottomPanelTab[];
15
+ activeTabId: string;
16
+ onTabChange: (tabId: string) => void;
17
+ isCollapsed?: boolean;
18
+ onCollapsedChange?: (isCollapsed: boolean) => void;
19
+ onExpand?: () => void;
20
+ tabsTrailingSlot?: ReactNode;
21
+ headerActions?: ReactNode;
22
+ overlay?: CanvasBottomPanelOverlay;
23
+ variant?: 'floating' | 'docked';
24
+ collapsedHeight?: CSSProperties['height'];
25
+ idPrefix?: string;
26
+ className?: string;
27
+ }
28
+ //# sourceMappingURL=CanvasBottomPanel.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasBottomPanel.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/CanvasBottomPanel/CanvasBottomPanel.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IAEnC,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,SAAS,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IAEvC,MAAM,EAAE,MAAM,EAAE,CAAC;IAKjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAE7B,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAEhC,eAAe,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT: ()=>external_CanvasBottomPanel_cjs_namespaceObject.CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT,
28
+ CanvasBottomPanel: ()=>external_CanvasBottomPanel_cjs_namespaceObject.CanvasBottomPanel,
29
+ CanvasBottomPanelActions: ()=>external_CanvasBottomPanel_cjs_namespaceObject.CanvasBottomPanelActions
30
+ });
31
+ const external_CanvasBottomPanel_cjs_namespaceObject = require("./CanvasBottomPanel.cjs");
32
+ exports.CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT = __webpack_exports__.CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT;
33
+ exports.CanvasBottomPanel = __webpack_exports__.CanvasBottomPanel;
34
+ exports.CanvasBottomPanelActions = __webpack_exports__.CanvasBottomPanelActions;
35
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
36
+ "CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT",
37
+ "CanvasBottomPanel",
38
+ "CanvasBottomPanelActions"
39
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
40
+ Object.defineProperty(exports, '__esModule', {
41
+ value: true
42
+ });
@@ -0,0 +1,3 @@
1
+ export { CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, CanvasBottomPanel, CanvasBottomPanelActions, } from './CanvasBottomPanel';
2
+ export type { CanvasBottomPanelOverlay, CanvasBottomPanelProps, CanvasBottomPanelTab, } from './CanvasBottomPanel.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/CanvasBottomPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, CanvasBottomPanel, CanvasBottomPanelActions } from "./CanvasBottomPanel.js";
2
+ export { CANVAS_BOTTOM_PANEL_COLLAPSED_HEIGHT, CanvasBottomPanel, CanvasBottomPanelActions };
@@ -31,10 +31,10 @@ const apollo_core_namespaceObject = require("@uipath/apollo-core");
31
31
  const index_cjs_namespaceObject = require("../../layouts/index.cjs");
32
32
  const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
33
33
  const external_react_namespaceObject = require("react");
34
+ const external_i18n_index_cjs_namespaceObject = require("../../../i18n/index.cjs");
34
35
  const external_icons_index_cjs_namespaceObject = require("../../../icons/index.cjs");
35
36
  const external_icons_index_cjs_namespaceObject_1 = require("../../icons/index.cjs");
36
37
  const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
37
- const external_i18n_index_cjs_namespaceObject = require("../../../i18n/index.cjs");
38
38
  const external_CanvasTooltip_cjs_namespaceObject = require("../CanvasTooltip.cjs");
39
39
  const external_ExecutionStatusIcon_index_cjs_namespaceObject = require("../ExecutionStatusIcon/index.cjs");
40
40
  const ExecutionStatusIcon_cjs_namespaceObject = require("../ExecutionStatusIcon/ExecutionStatusIcon.cjs");
@@ -122,6 +122,7 @@ const StageNodeHeaderInner = ({ props, isReadOnly, isException, status, handleTa
122
122
  const formattedStageDuration = void 0 !== stageDurationMs ? (0, external_formatDuration_cjs_namespaceObject.formatDurationMs)(stageDurationMs, locale) : execution?.stageStatus?.duration;
123
123
  const stageDurationLabel = execution?.stageStatus?.durationLabel;
124
124
  const stageDuration = formattedStageDuration && stageDurationLabel ? `${stageDurationLabel} ${formattedStageDuration}` : formattedStageDuration;
125
+ const exactStageDuration = void 0 !== stageDurationMs && (0, external_formatDuration_cjs_namespaceObject.hasHiddenDurationParts)(stageDurationMs) ? (0, external_formatDuration_cjs_namespaceObject.formatExactDurationMs)(stageDurationMs, locale) : void 0;
125
126
  const slaText = execution?.stageStatus?.slaText;
126
127
  const slaIcon = execution?.stageStatus?.slaIcon;
127
128
  const slaIndicator = slaIcon ? SLA_ICON_CONFIG[slaIcon] : void 0;
@@ -252,10 +253,14 @@ const StageNodeHeaderInner = ({ props, isReadOnly, isException, status, handleTa
252
253
  })
253
254
  ]
254
255
  }),
255
- stageDuration && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
256
- className: "flex min-h-8 items-center text-xs text-foreground-muted",
257
- "data-testid": `stage-duration-${id}`,
258
- children: stageDuration
256
+ stageDuration && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_CanvasTooltip_cjs_namespaceObject.CanvasTooltip, {
257
+ content: exactStageDuration,
258
+ placement: "top",
259
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
260
+ className: "flex min-h-8 items-center text-xs text-foreground-muted",
261
+ "data-testid": `stage-duration-${id}`,
262
+ children: stageDuration
263
+ })
259
264
  })
260
265
  ]
261
266
  });
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeHeader.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeHeader.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAgB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8RnF,eAAO,MAAM,eAAe,wGAhLzB;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACvD,6CA0KwD,CAAC"}
1
+ {"version":3,"file":"StageNodeHeader.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeHeader.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAgB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoSnF,eAAO,MAAM,eAAe,wGAtLzB;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACvD,6CAgLwD,CAAC"}