@hitachivantara/uikit-react-pentaho 0.1.1 → 0.1.2
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.
- package/dist/cjs/Canvas/{FloatingPanel/FloatingPanel.cjs → BottomPanel/BottomPanel.cjs} +7 -7
- package/dist/cjs/Canvas/{FloatingPanel/FloatingPanel.styles.cjs → BottomPanel/BottomPanel.styles.cjs} +1 -1
- package/dist/cjs/Canvas/SidePanel/SidePanel.cjs +109 -0
- package/dist/cjs/Canvas/SidePanel/SidePanel.styles.cjs +64 -0
- package/dist/cjs/Canvas/Tab/Tab.cjs +1 -1
- package/dist/cjs/Canvas/Tabs/Tabs.cjs +1 -1
- package/dist/cjs/Canvas/Toolbar/Toolbar.cjs +1 -1
- package/dist/cjs/index.cjs +8 -8
- package/dist/esm/Canvas/{FloatingPanel/FloatingPanel.js → BottomPanel/BottomPanel.js} +7 -7
- package/dist/esm/Canvas/BottomPanel/BottomPanel.js.map +1 -0
- package/dist/esm/Canvas/{FloatingPanel/FloatingPanel.styles.js → BottomPanel/BottomPanel.styles.js} +1 -1
- package/dist/esm/Canvas/BottomPanel/BottomPanel.styles.js.map +1 -0
- package/dist/esm/Canvas/SidePanel/SidePanel.js +110 -0
- package/dist/esm/Canvas/SidePanel/SidePanel.js.map +1 -0
- package/dist/esm/Canvas/SidePanel/SidePanel.styles.js +64 -0
- package/dist/esm/Canvas/SidePanel/SidePanel.styles.js.map +1 -0
- package/dist/esm/Canvas/Tab/Tab.js +1 -1
- package/dist/esm/Canvas/Tabs/Tabs.js +1 -1
- package/dist/esm/Canvas/Toolbar/Toolbar.js +1 -1
- package/dist/esm/index.js +9 -9
- package/dist/types/index.d.ts +36 -36
- package/package.json +4 -4
- package/dist/cjs/Canvas/Panel/Panel.cjs +0 -111
- package/dist/cjs/Canvas/Panel/Panel.styles.cjs +0 -61
- package/dist/esm/Canvas/FloatingPanel/FloatingPanel.js.map +0 -1
- package/dist/esm/Canvas/FloatingPanel/FloatingPanel.styles.js.map +0 -1
- package/dist/esm/Canvas/Panel/Panel.js +0 -112
- package/dist/esm/Canvas/Panel/Panel.js.map +0 -1
- package/dist/esm/Canvas/Panel/Panel.styles.js +0 -61
- package/dist/esm/Canvas/Panel/Panel.styles.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const reactResizeDetector = require("react-resize-detector");
|
|
6
6
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
7
|
-
const
|
|
7
|
+
const BottomPanel_styles = require("./BottomPanel.styles.cjs");
|
|
8
8
|
const Tabs = require("../Tabs/Tabs.cjs");
|
|
9
9
|
const Tab = require("../Tab/Tab.cjs");
|
|
10
|
-
const
|
|
10
|
+
const HvCanvasBottomPanel = react.forwardRef((props, ref) => {
|
|
11
11
|
const {
|
|
12
12
|
id: idProp,
|
|
13
13
|
className,
|
|
@@ -22,8 +22,8 @@ const HvCanvasFloatingPanel = react.forwardRef((props, ref) => {
|
|
|
22
22
|
onTabChange,
|
|
23
23
|
onAction,
|
|
24
24
|
...others
|
|
25
|
-
} = uikitReactCore.useDefaultProps("
|
|
26
|
-
const { classes, cx } =
|
|
25
|
+
} = uikitReactCore.useDefaultProps("HvCanvasBottomPanel", props);
|
|
26
|
+
const { classes, cx } = BottomPanel_styles.useClasses(classesProp);
|
|
27
27
|
const id = uikitReactCore.useUniqueId(idProp);
|
|
28
28
|
const { width: tabWidth = 0, ref: tabRef } = reactResizeDetector.useResizeDetector({
|
|
29
29
|
handleHeight: false
|
|
@@ -158,5 +158,5 @@ const HvCanvasFloatingPanel = react.forwardRef((props, ref) => {
|
|
|
158
158
|
}
|
|
159
159
|
);
|
|
160
160
|
});
|
|
161
|
-
exports.
|
|
162
|
-
exports.
|
|
161
|
+
exports.canvasBottomPanelClasses = BottomPanel_styles.staticClasses;
|
|
162
|
+
exports.HvCanvasBottomPanel = HvCanvasBottomPanel;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
4
4
|
const { staticClasses, useClasses } = uikitReactCore.createClasses(
|
|
5
|
-
"
|
|
5
|
+
"HvCanvasBottomPanel",
|
|
6
6
|
{
|
|
7
7
|
root: {
|
|
8
8
|
position: "absolute",
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
6
|
+
const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
|
|
7
|
+
const SidePanel_styles = require("./SidePanel.styles.cjs");
|
|
8
|
+
const Tabs = require("../Tabs/Tabs.cjs");
|
|
9
|
+
const Tab = require("../Tab/Tab.cjs");
|
|
10
|
+
const DEFAULT_LABELS = {
|
|
11
|
+
open: "Open",
|
|
12
|
+
close: "Close"
|
|
13
|
+
};
|
|
14
|
+
const HvCanvasSidePanel = react.forwardRef((props, ref) => {
|
|
15
|
+
const {
|
|
16
|
+
id: idProp,
|
|
17
|
+
tab: tabProp,
|
|
18
|
+
open: openProp,
|
|
19
|
+
defaultOpen = false,
|
|
20
|
+
tabs,
|
|
21
|
+
onToggle,
|
|
22
|
+
onTabChange,
|
|
23
|
+
labels: labelsProp,
|
|
24
|
+
className,
|
|
25
|
+
children,
|
|
26
|
+
classes: classesProp,
|
|
27
|
+
...others
|
|
28
|
+
} = uikitReactCore.useDefaultProps("HvCanvasSidePanel", props);
|
|
29
|
+
const id = uikitReactCore.useUniqueId(idProp);
|
|
30
|
+
const { classes, cx } = SidePanel_styles.useClasses(classesProp);
|
|
31
|
+
const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
|
|
32
|
+
const [open, setOpen] = uikitReactCore.useControlled(openProp, Boolean(defaultOpen));
|
|
33
|
+
const [selectedTab, setSelectedTab] = uikitReactCore.useControlled(
|
|
34
|
+
tabProp,
|
|
35
|
+
tabs?.[0]?.id ?? "none"
|
|
36
|
+
);
|
|
37
|
+
const handleTogglePanel = (event) => {
|
|
38
|
+
setOpen((prev) => !prev);
|
|
39
|
+
onToggle?.(event, !open);
|
|
40
|
+
};
|
|
41
|
+
const handleTabChange = (event, tabId) => {
|
|
42
|
+
setSelectedTab(tabId);
|
|
43
|
+
onTabChange?.(event, tabId);
|
|
44
|
+
};
|
|
45
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
47
|
+
"div",
|
|
48
|
+
{
|
|
49
|
+
ref,
|
|
50
|
+
id,
|
|
51
|
+
className: cx(classes.root, className, {
|
|
52
|
+
[classes.open]: open,
|
|
53
|
+
[classes.close]: !open
|
|
54
|
+
}),
|
|
55
|
+
...others,
|
|
56
|
+
children: [
|
|
57
|
+
tabs && /* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
+
Tabs.HvCanvasTabs,
|
|
59
|
+
{
|
|
60
|
+
className: classes.tabs,
|
|
61
|
+
value: selectedTab,
|
|
62
|
+
onChange: handleTabChange,
|
|
63
|
+
children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
Tab.HvCanvasTab,
|
|
65
|
+
{
|
|
66
|
+
id: `${id}-${tab.id}`,
|
|
67
|
+
value: tab.id,
|
|
68
|
+
tabIndex: 0,
|
|
69
|
+
children: tab.content
|
|
70
|
+
},
|
|
71
|
+
tab.id
|
|
72
|
+
))
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
uikitReactCore.HvPanel,
|
|
77
|
+
{
|
|
78
|
+
role: tabs ? "tabpanel" : void 0,
|
|
79
|
+
"aria-labelledby": tabs ? `${id}-${selectedTab}` : void 0,
|
|
80
|
+
className: classes.content,
|
|
81
|
+
children
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
className: cx(classes.handle, {
|
|
91
|
+
[classes.handleOpen]: open,
|
|
92
|
+
[classes.handleClose]: !open
|
|
93
|
+
}),
|
|
94
|
+
onClick: handleTogglePanel,
|
|
95
|
+
role: "button",
|
|
96
|
+
tabIndex: 0,
|
|
97
|
+
onKeyDown: (e) => {
|
|
98
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
99
|
+
handleTogglePanel(e);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"aria-label": open ? labels.close : labels.open,
|
|
103
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Start, { color: ["primary"] }) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.End, { color: ["primary"] }) })
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
] });
|
|
107
|
+
});
|
|
108
|
+
exports.canvasSidePanelClasses = SidePanel_styles.staticClasses;
|
|
109
|
+
exports.HvCanvasSidePanel = HvCanvasSidePanel;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
4
|
+
const { staticClasses, useClasses } = uikitReactCore.createClasses(
|
|
5
|
+
"HvCanvasSidePanel",
|
|
6
|
+
{
|
|
7
|
+
root: {
|
|
8
|
+
height: "100%",
|
|
9
|
+
position: "absolute",
|
|
10
|
+
top: 0,
|
|
11
|
+
left: 0,
|
|
12
|
+
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
13
|
+
backgroundColor: "transparent",
|
|
14
|
+
transition: "visibility 0.3s ease, width 0.3s ease",
|
|
15
|
+
overflow: "hidden",
|
|
16
|
+
"&$open": {
|
|
17
|
+
width: 320,
|
|
18
|
+
visibility: "visible"
|
|
19
|
+
},
|
|
20
|
+
"&$close": {
|
|
21
|
+
width: 0,
|
|
22
|
+
visibility: "hidden"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
tabs: {},
|
|
26
|
+
content: {
|
|
27
|
+
height: "100%"
|
|
28
|
+
},
|
|
29
|
+
handle: {
|
|
30
|
+
height: "172px",
|
|
31
|
+
width: "35px",
|
|
32
|
+
display: "flex",
|
|
33
|
+
justifyContent: "center",
|
|
34
|
+
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
35
|
+
backgroundColor: uikitReactCore.theme.colors.atmo1,
|
|
36
|
+
borderRadius: "0px 16px 16px 0px",
|
|
37
|
+
position: "absolute",
|
|
38
|
+
transition: "left 0.3s ease",
|
|
39
|
+
top: "calc(50% - 86px)",
|
|
40
|
+
"&$handleOpen": {
|
|
41
|
+
left: 320
|
|
42
|
+
},
|
|
43
|
+
"&$handleClose": {
|
|
44
|
+
left: 0
|
|
45
|
+
},
|
|
46
|
+
"&:hover": {
|
|
47
|
+
cursor: "pointer"
|
|
48
|
+
},
|
|
49
|
+
"&:focus-visible": {
|
|
50
|
+
...uikitReactCore.outlineStyles
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
handleButton: {
|
|
54
|
+
top: "calc(50% - 16px)",
|
|
55
|
+
position: "absolute"
|
|
56
|
+
},
|
|
57
|
+
open: {},
|
|
58
|
+
close: {},
|
|
59
|
+
handleOpen: {},
|
|
60
|
+
handleClose: {}
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
exports.staticClasses = staticClasses;
|
|
64
|
+
exports.useClasses = useClasses;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const Tab = require("@mui/base/Tab");
|
|
6
6
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const Tabs = require("@mui/base/Tabs");
|
|
6
6
|
const TabsList = require("@mui/base/TabsList");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
6
6
|
const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const Toolbar_styles = require("./Canvas/Toolbar/Toolbar.styles.cjs");
|
|
4
4
|
const Toolbar = require("./Canvas/Toolbar/Toolbar.cjs");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const SidePanel_styles = require("./Canvas/SidePanel/SidePanel.styles.cjs");
|
|
6
|
+
const SidePanel = require("./Canvas/SidePanel/SidePanel.cjs");
|
|
7
7
|
const Tabs_styles = require("./Canvas/Tabs/Tabs.styles.cjs");
|
|
8
8
|
const Tabs = require("./Canvas/Tabs/Tabs.cjs");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const BottomPanel_styles = require("./Canvas/BottomPanel/BottomPanel.styles.cjs");
|
|
10
|
+
const BottomPanel = require("./Canvas/BottomPanel/BottomPanel.cjs");
|
|
11
11
|
const Tab_styles = require("./Canvas/Tab/Tab.styles.cjs");
|
|
12
12
|
const Tab = require("./Canvas/Tab/Tab.cjs");
|
|
13
13
|
exports.canvasToolbarClasses = Toolbar_styles.staticClasses;
|
|
14
14
|
exports.HvCanvasToolbar = Toolbar.HvCanvasToolbar;
|
|
15
|
-
exports.
|
|
16
|
-
exports.
|
|
15
|
+
exports.canvasSidePanelClasses = SidePanel_styles.staticClasses;
|
|
16
|
+
exports.HvCanvasSidePanel = SidePanel.HvCanvasSidePanel;
|
|
17
17
|
exports.canvasTabsClasses = Tabs_styles.staticClasses;
|
|
18
18
|
exports.HvCanvasTabs = Tabs.HvCanvasTabs;
|
|
19
|
-
exports.
|
|
20
|
-
exports.
|
|
19
|
+
exports.canvasBottomPanelClasses = BottomPanel_styles.staticClasses;
|
|
20
|
+
exports.HvCanvasBottomPanel = BottomPanel.HvCanvasBottomPanel;
|
|
21
21
|
exports.canvasTabClasses = Tab_styles.staticClasses;
|
|
22
22
|
exports.HvCanvasTab = Tab.HvCanvasTab;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsxs, jsx } from "
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useMemo } from "react";
|
|
3
3
|
import { useResizeDetector } from "react-resize-detector";
|
|
4
4
|
import { useDefaultProps, useUniqueId, useControlled, HvActionsGeneric, HvPanel } from "@hitachivantara/uikit-react-core";
|
|
5
|
-
import { useClasses } from "./
|
|
6
|
-
import { staticClasses } from "./
|
|
5
|
+
import { useClasses } from "./BottomPanel.styles.js";
|
|
6
|
+
import { staticClasses } from "./BottomPanel.styles.js";
|
|
7
7
|
import { HvCanvasTabs } from "../Tabs/Tabs.js";
|
|
8
8
|
import { HvCanvasTab } from "../Tab/Tab.js";
|
|
9
|
-
const
|
|
9
|
+
const HvCanvasBottomPanel = forwardRef((props, ref) => {
|
|
10
10
|
const {
|
|
11
11
|
id: idProp,
|
|
12
12
|
className,
|
|
@@ -21,7 +21,7 @@ const HvCanvasFloatingPanel = forwardRef((props, ref) => {
|
|
|
21
21
|
onTabChange,
|
|
22
22
|
onAction,
|
|
23
23
|
...others
|
|
24
|
-
} = useDefaultProps("
|
|
24
|
+
} = useDefaultProps("HvCanvasBottomPanel", props);
|
|
25
25
|
const { classes, cx } = useClasses(classesProp);
|
|
26
26
|
const id = useUniqueId(idProp);
|
|
27
27
|
const { width: tabWidth = 0, ref: tabRef } = useResizeDetector({
|
|
@@ -158,6 +158,6 @@ const HvCanvasFloatingPanel = forwardRef((props, ref) => {
|
|
|
158
158
|
);
|
|
159
159
|
});
|
|
160
160
|
export {
|
|
161
|
-
|
|
162
|
-
staticClasses as
|
|
161
|
+
HvCanvasBottomPanel,
|
|
162
|
+
staticClasses as canvasBottomPanelClasses
|
|
163
163
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomPanel.js","sources":["../../../../src/Canvas/BottomPanel/BottomPanel.tsx"],"sourcesContent":["import { forwardRef, useMemo } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport {\n ExtractNames,\n HvActionGeneric,\n HvActionsGeneric,\n HvActionsGenericProps,\n HvBaseProps,\n HvPanel,\n useControlled,\n useDefaultProps,\n useUniqueId,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { HvCanvasTab } from \"../Tab\";\nimport { HvCanvasTabs, HvCanvasTabsProps } from \"../Tabs\";\nimport { staticClasses, useClasses } from \"./BottomPanel.styles\";\n\nexport { staticClasses as canvasBottomPanelClasses };\n\nexport type HvCanvasBottomPanelClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvCanvasBottomPanelProps extends HvBaseProps {\n /** Open state of the bottom panel. */\n open?: boolean;\n /** Minimize state of the bottom panel tabs'. */\n minimize?: boolean;\n /** List of tabs visible on the panel. */\n tabs: {\n id: string | number;\n title: React.ReactNode;\n }[];\n /** Id of the selected tab if it needs to be controlled. */\n tab?: string | number;\n /** Callback triggered when a tab changes/is clicked. */\n onTabChange?: (\n event: React.SyntheticEvent | null,\n tabId: string | number | null,\n ) => void;\n /** Actions to be rendered in the left side of a tab. If more than one action is provided, a dropdown menu will be used. */\n leftActions?: HvActionsGenericProps[\"actions\"];\n /** Actions to be rendered in the right side of a tab.If more than two actions are provided, a dropdown menu will be used to add the remaining actions. */\n rightActions?: HvActionsGenericProps[\"actions\"];\n /** Callback triggered when a right or left action is clicked. */\n onAction?: (\n event: React.SyntheticEvent,\n action: HvActionGeneric,\n tabId: string | number,\n ) => void;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasBottomPanelClasses;\n}\n\n/**\n * A bottom panel component to use in a canvas context.\n */\nexport const HvCanvasBottomPanel = forwardRef<\n HTMLDivElement,\n HvCanvasBottomPanelProps\n>((props, ref) => {\n const {\n id: idProp,\n className,\n children,\n open,\n tabs,\n minimize,\n leftActions,\n rightActions,\n tab: tabProp,\n classes: classesProp,\n onTabChange,\n onAction,\n ...others\n } = useDefaultProps(\"HvCanvasBottomPanel\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const id = useUniqueId(idProp);\n\n // Tab resize detector: to position tab actions and set the panel top right border radius\n const { width: tabWidth = 0, ref: tabRef } = useResizeDetector({\n handleHeight: false,\n });\n // Tab panel resize detector: to set the panel top right border radius\n const { width: panelWidth = 0, ref: panelRef } = useResizeDetector({\n handleHeight: false,\n });\n\n // Left actions resize detector: to position tab title according with actions\n const { width: leftActionWidth = 32, ref: leftActionRef } = useResizeDetector(\n {\n handleHeight: false,\n refreshMode: \"debounce\",\n refreshOptions: {\n trailing: true,\n },\n },\n );\n // Right actions resize detector: to position tab title according with actions\n const { width: rightActionWidth = 32, ref: rightActionRef } =\n useResizeDetector({\n handleHeight: false,\n refreshMode: \"debounce\",\n refreshOptions: {\n trailing: true,\n },\n });\n\n const overflowing = useMemo(() => {\n const scrollWidth = tabRef.current?.scrollWidth ?? 0;\n return scrollWidth - tabWidth >= 1;\n }, [tabRef, tabWidth]);\n\n const [selectedTab, setSelectedTab] = useControlled<string | number | null>(\n tabProp,\n tabs[0].id,\n );\n\n const handleTabChange: HvCanvasTabsProps[\"onChange\"] = (event, tabId) => {\n setSelectedTab(tabId);\n onTabChange?.(event, tabId);\n };\n\n return (\n <div\n id={id}\n ref={ref}\n className={cx(\n classes.root,\n {\n [classes.closed]: !open,\n [classes.minimized]: minimize,\n [classes.multipleTabs]: tabs.length > 1,\n [classes.overflowing]: overflowing,\n },\n className,\n )}\n {...others}\n >\n <div className={classes.tabsRoot}>\n <HvCanvasTabs\n style={{\n // @ts-ignore\n \"--left-actions-width\": `${leftActionWidth}px`,\n \"--right-actions-width\": `${rightActionWidth}px`,\n }}\n onChange={handleTabChange}\n value={selectedTab}\n >\n {tabs.map((tab, index) => (\n <HvCanvasTab\n ref={index === 0 ? tabRef : undefined}\n key={tab.id}\n id={`${id}-${tab.id}`}\n value={tab.id}\n className={classes.tab}\n >\n <div className={classes.tabTitle}>{tab.title}</div>\n </HvCanvasTab>\n ))}\n </HvCanvasTabs>\n {/* For accessibility purposes, these buttons cannot be children of a tablist so they are rendered as HvCanvasTabs sibling. */}\n {(leftActions || rightActions) && !overflowing\n ? tabs.map((tab, index) => {\n const btnsDisabled = selectedTab !== tab.id && !minimize;\n return (\n <div\n key={tab.id}\n style={{\n // @ts-ignore\n \"--tab-width\": `${tabWidth}px`,\n \"--right\": `calc((${index} + 1) * var(--tab-width))`,\n \"--left\": `calc(${index} * var(--tab-width))`,\n }}\n >\n {leftActions && (\n <div ref={leftActionRef} className={classes.leftActions}>\n <HvActionsGeneric\n maxVisibleActions={1}\n actions={leftActions}\n disabled={btnsDisabled}\n onAction={(event, action) =>\n onAction?.(event, action, tab.id)\n }\n variant=\"secondaryGhost\"\n iconOnly\n />\n </div>\n )}\n {rightActions && (\n <div ref={rightActionRef} className={classes.rightActions}>\n <HvActionsGeneric\n maxVisibleActions={2}\n actions={rightActions}\n disabled={btnsDisabled}\n onAction={(event, action) =>\n onAction?.(event, action, tab.id)\n }\n variant=\"secondaryGhost\"\n iconOnly\n />\n </div>\n )}\n </div>\n );\n })\n : null}\n </div>\n <HvPanel\n ref={panelRef}\n role=\"tabpanel\"\n aria-labelledby={`${id}-${selectedTab}`}\n className={classes.content}\n style={{\n // @ts-ignore\n \"--right-border-radius\":\n tabWidth * tabs.length >= panelWidth ? \"0px\" : \"16px\",\n }}\n >\n {children}\n </HvPanel>\n </div>\n );\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomPanel.styles.js","sources":["../../../../src/Canvas/BottomPanel/BottomPanel.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\n \"HvCanvasBottomPanel\",\n {\n root: {\n position: \"absolute\",\n display: \"flex\",\n flexDirection: \"column\",\n right: 0,\n bottom: 0,\n width: \"100%\",\n maxHeight: \"500px\",\n visibility: \"visible\",\n transition: \"visibility 0.3s ease, max-height 0.3s ease, width 0.3s ease\",\n },\n closed: {\n maxHeight: 0,\n visibility: \"hidden\",\n },\n minimized: {\n \"& $content\": {\n display: \"none\",\n },\n \"& $tab\": {\n backgroundColor: theme.colors.atmo1,\n ...theme.typography.label,\n },\n },\n multipleTabs: {\n \"& $tab\": { maxWidth: \"288px\" },\n \"& $rightActions\": {\n right: `calc(100% - var(--right) + ${theme.space.xs})`,\n },\n },\n overflowing: {\n \"& $tabTitle\": {\n paddingLeft: theme.space.sm,\n paddingRight: theme.space.sm,\n },\n },\n tab: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n width: \"100%\",\n },\n tabTitle: {\n display: \"flex\",\n width: \"100%\",\n padding: theme.space.sm,\n paddingLeft: `calc(var(--left-actions-width) + ${theme.space.xs})`,\n paddingRight: `calc(var(--right-actions-width) + ${theme.space.xs})`,\n },\n tabsRoot: {\n position: \"relative\",\n },\n leftActions: {\n position: \"absolute\",\n left: `calc(var(--left) + ${theme.space.xs})`,\n top: 8,\n },\n rightActions: {\n position: \"absolute\",\n right: theme.space.xs,\n top: 8,\n },\n content: { borderTopRightRadius: \"var(--right-border-radius)\" },\n },\n);\n"],"names":[],"mappings":";AAEa,MAAA,EAAE,eAAe,WAAA,IAAe;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,eAAe;AAAA,MACf,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,YAAY;AAAA,IACd;AAAA,IACA,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,cAAc;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,MACA,UAAU;AAAA,QACR,iBAAiB,MAAM,OAAO;AAAA,QAC9B,GAAG,MAAM,WAAW;AAAA,MACtB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,UAAU,EAAE,UAAU,QAAQ;AAAA,MAC9B,mBAAmB;AAAA,QACjB,OAAO,8BAA8B,MAAM,MAAM,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,eAAe;AAAA,QACb,aAAa,MAAM,MAAM;AAAA,QACzB,cAAc,MAAM,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,KAAK;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS,MAAM,MAAM;AAAA,MACrB,aAAa,oCAAoC,MAAM,MAAM,EAAE;AAAA,MAC/D,cAAc,qCAAqC,MAAM,MAAM,EAAE;AAAA,IACnE;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,MAAM,sBAAsB,MAAM,MAAM,EAAE;AAAA,MAC1C,KAAK;AAAA,IACP;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,OAAO,MAAM,MAAM;AAAA,MACnB,KAAK;AAAA,IACP;AAAA,IACA,SAAS,EAAE,sBAAsB,6BAA6B;AAAA,EAChE;AACF;"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { useDefaultProps, useUniqueId, useLabels, useControlled, HvPanel } from "@hitachivantara/uikit-react-core";
|
|
4
|
+
import { Start, End } from "@hitachivantara/uikit-react-icons";
|
|
5
|
+
import { useClasses } from "./SidePanel.styles.js";
|
|
6
|
+
import { staticClasses } from "./SidePanel.styles.js";
|
|
7
|
+
import { HvCanvasTabs } from "../Tabs/Tabs.js";
|
|
8
|
+
import { HvCanvasTab } from "../Tab/Tab.js";
|
|
9
|
+
const DEFAULT_LABELS = {
|
|
10
|
+
open: "Open",
|
|
11
|
+
close: "Close"
|
|
12
|
+
};
|
|
13
|
+
const HvCanvasSidePanel = forwardRef((props, ref) => {
|
|
14
|
+
const {
|
|
15
|
+
id: idProp,
|
|
16
|
+
tab: tabProp,
|
|
17
|
+
open: openProp,
|
|
18
|
+
defaultOpen = false,
|
|
19
|
+
tabs,
|
|
20
|
+
onToggle,
|
|
21
|
+
onTabChange,
|
|
22
|
+
labels: labelsProp,
|
|
23
|
+
className,
|
|
24
|
+
children,
|
|
25
|
+
classes: classesProp,
|
|
26
|
+
...others
|
|
27
|
+
} = useDefaultProps("HvCanvasSidePanel", props);
|
|
28
|
+
const id = useUniqueId(idProp);
|
|
29
|
+
const { classes, cx } = useClasses(classesProp);
|
|
30
|
+
const labels = useLabels(DEFAULT_LABELS, labelsProp);
|
|
31
|
+
const [open, setOpen] = useControlled(openProp, Boolean(defaultOpen));
|
|
32
|
+
const [selectedTab, setSelectedTab] = useControlled(
|
|
33
|
+
tabProp,
|
|
34
|
+
tabs?.[0]?.id ?? "none"
|
|
35
|
+
);
|
|
36
|
+
const handleTogglePanel = (event) => {
|
|
37
|
+
setOpen((prev) => !prev);
|
|
38
|
+
onToggle?.(event, !open);
|
|
39
|
+
};
|
|
40
|
+
const handleTabChange = (event, tabId) => {
|
|
41
|
+
setSelectedTab(tabId);
|
|
42
|
+
onTabChange?.(event, tabId);
|
|
43
|
+
};
|
|
44
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
45
|
+
/* @__PURE__ */ jsxs(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
ref,
|
|
49
|
+
id,
|
|
50
|
+
className: cx(classes.root, className, {
|
|
51
|
+
[classes.open]: open,
|
|
52
|
+
[classes.close]: !open
|
|
53
|
+
}),
|
|
54
|
+
...others,
|
|
55
|
+
children: [
|
|
56
|
+
tabs && /* @__PURE__ */ jsx(
|
|
57
|
+
HvCanvasTabs,
|
|
58
|
+
{
|
|
59
|
+
className: classes.tabs,
|
|
60
|
+
value: selectedTab,
|
|
61
|
+
onChange: handleTabChange,
|
|
62
|
+
children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
63
|
+
HvCanvasTab,
|
|
64
|
+
{
|
|
65
|
+
id: `${id}-${tab.id}`,
|
|
66
|
+
value: tab.id,
|
|
67
|
+
tabIndex: 0,
|
|
68
|
+
children: tab.content
|
|
69
|
+
},
|
|
70
|
+
tab.id
|
|
71
|
+
))
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
/* @__PURE__ */ jsx(
|
|
75
|
+
HvPanel,
|
|
76
|
+
{
|
|
77
|
+
role: tabs ? "tabpanel" : void 0,
|
|
78
|
+
"aria-labelledby": tabs ? `${id}-${selectedTab}` : void 0,
|
|
79
|
+
className: classes.content,
|
|
80
|
+
children
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
className: cx(classes.handle, {
|
|
90
|
+
[classes.handleOpen]: open,
|
|
91
|
+
[classes.handleClose]: !open
|
|
92
|
+
}),
|
|
93
|
+
onClick: handleTogglePanel,
|
|
94
|
+
role: "button",
|
|
95
|
+
tabIndex: 0,
|
|
96
|
+
onKeyDown: (e) => {
|
|
97
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
98
|
+
handleTogglePanel(e);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"aria-label": open ? labels.close : labels.open,
|
|
102
|
+
children: /* @__PURE__ */ jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsx(Start, { color: ["primary"] }) : /* @__PURE__ */ jsx(End, { color: ["primary"] }) })
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
] });
|
|
106
|
+
});
|
|
107
|
+
export {
|
|
108
|
+
HvCanvasSidePanel,
|
|
109
|
+
staticClasses as canvasSidePanelClasses
|
|
110
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidePanel.js","sources":["../../../../src/Canvas/SidePanel/SidePanel.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n ExtractNames,\n HvBaseProps,\n HvPanel,\n useControlled,\n useDefaultProps,\n useLabels,\n useUniqueId,\n} from \"@hitachivantara/uikit-react-core\";\nimport { End, Start } from \"@hitachivantara/uikit-react-icons\";\n\nimport { HvCanvasTab } from \"../Tab\";\nimport { HvCanvasTabs, HvCanvasTabsProps } from \"../Tabs\";\nimport { staticClasses, useClasses } from \"./SidePanel.styles\";\n\nexport { staticClasses as canvasSidePanelClasses };\n\nexport type HvCanvasSidePanelClasses = ExtractNames<typeof useClasses>;\n\nconst DEFAULT_LABELS = {\n open: \"Open\",\n close: \"Close\",\n};\n\nexport interface HvCanvasSidePanelProps extends HvBaseProps<HTMLDivElement> {\n /** When controlled, defines id the panel is open or not. */\n open?: boolean;\n /** When uncontrolled, defines the initial state of the panel. */\n defaultOpen?: boolean;\n /** List of tabs visible on the panel. */\n tabs?: {\n id: string | number;\n content: React.ReactNode;\n }[];\n /** Id of the selected tab if it needs to be controlled. */\n tab?: string | number;\n /** Callback triggered whenever the panel toggles. */\n onToggle?: (\n event: React.MouseEvent | React.KeyboardEvent,\n open: boolean,\n ) => void;\n /** Callback triggered when a tab changes/is clicked. */\n onTabChange?: (\n event: React.SyntheticEvent | null,\n tabId: string | number | null,\n ) => void;\n /** An object containing all the labels. */\n labels?: Partial<typeof DEFAULT_LABELS>;\n /** The content that will be rendered within the canvas panel. */\n children?: React.ReactNode;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasSidePanelClasses;\n}\n\n/**\n * A side panel component to use in a canvas context.\n */\nexport const HvCanvasSidePanel = forwardRef<\n HTMLDivElement,\n HvCanvasSidePanelProps\n>((props, ref) => {\n const {\n id: idProp,\n tab: tabProp,\n open: openProp,\n defaultOpen = false,\n tabs,\n onToggle,\n onTabChange,\n labels: labelsProp,\n className,\n children,\n classes: classesProp,\n ...others\n } = useDefaultProps(\"HvCanvasSidePanel\", props);\n\n const id = useUniqueId(idProp);\n\n const { classes, cx } = useClasses(classesProp);\n\n const labels = useLabels(DEFAULT_LABELS, labelsProp);\n\n const [open, setOpen] = useControlled(openProp, Boolean(defaultOpen));\n const [selectedTab, setSelectedTab] = useControlled<string | number | null>(\n tabProp,\n tabs?.[0]?.id ?? \"none\",\n );\n\n const handleTogglePanel = (event: React.MouseEvent | React.KeyboardEvent) => {\n setOpen((prev) => !prev);\n onToggle?.(event, !open);\n };\n\n const handleTabChange: HvCanvasTabsProps[\"onChange\"] = (event, tabId) => {\n setSelectedTab(tabId);\n onTabChange?.(event, tabId);\n };\n\n return (\n <>\n <div\n ref={ref}\n id={id}\n className={cx(classes.root, className, {\n [classes.open]: open,\n [classes.close]: !open,\n })}\n {...others}\n >\n {tabs && (\n <HvCanvasTabs\n className={classes.tabs}\n value={selectedTab}\n onChange={handleTabChange}\n >\n {tabs.map((tab) => (\n <HvCanvasTab\n key={tab.id}\n id={`${id}-${tab.id}`}\n value={tab.id}\n tabIndex={0}\n >\n {tab.content}\n </HvCanvasTab>\n ))}\n </HvCanvasTabs>\n )}\n <HvPanel\n role={tabs ? \"tabpanel\" : undefined}\n aria-labelledby={tabs ? `${id}-${selectedTab}` : undefined}\n className={classes.content}\n >\n {children}\n </HvPanel>\n </div>\n <div\n className={cx(classes.handle, {\n [classes.handleOpen]: open,\n [classes.handleClose]: !open,\n })}\n onClick={handleTogglePanel}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n handleTogglePanel(e);\n }\n }}\n aria-label={open ? labels.close : labels.open}\n >\n <div className={classes.handleButton}>\n {open ? <Start color={[\"primary\"]} /> : <End color={[\"primary\"]} />}\n </div>\n </div>\n </>\n );\n});\n"],"names":[],"mappings":";;;;;;;;AAoBA,MAAM,iBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,OAAO;AACT;AAmCO,MAAM,oBAAoB,WAG/B,CAAC,OAAO,QAAQ;AACV,QAAA;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,GAAG;AAAA,EAAA,IACD,gBAAgB,qBAAqB,KAAK;AAExC,QAAA,KAAK,YAAY,MAAM;AAE7B,QAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAExC,QAAA,SAAS,UAAU,gBAAgB,UAAU;AAE7C,QAAA,CAAC,MAAM,OAAO,IAAI,cAAc,UAAU,QAAQ,WAAW,CAAC;AAC9D,QAAA,CAAC,aAAa,cAAc,IAAI;AAAA,IACpC;AAAA,IACA,OAAO,CAAC,GAAG,MAAM;AAAA,EAAA;AAGb,QAAA,oBAAoB,CAAC,UAAkD;AACnE,YAAA,CAAC,SAAS,CAAC,IAAI;AACZ,eAAA,OAAO,CAAC,IAAI;AAAA,EAAA;AAGnB,QAAA,kBAAiD,CAAC,OAAO,UAAU;AACvE,mBAAe,KAAK;AACpB,kBAAc,OAAO,KAAK;AAAA,EAAA;AAG5B,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAW,GAAG,QAAQ,MAAM,WAAW;AAAA,UACrC,CAAC,QAAQ,IAAI,GAAG;AAAA,UAChB,CAAC,QAAQ,KAAK,GAAG,CAAC;AAAA,QAAA,CACnB;AAAA,QACA,GAAG;AAAA,QAEH,UAAA;AAAA,UACC,QAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,cACP,UAAU;AAAA,cAET,UAAA,KAAK,IAAI,CAAC,QACT;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE;AAAA,kBACnB,OAAO,IAAI;AAAA,kBACX,UAAU;AAAA,kBAET,UAAI,IAAA;AAAA,gBAAA;AAAA,gBALA,IAAI;AAAA,cAAA,CAOZ;AAAA,YAAA;AAAA,UACH;AAAA,UAEF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,OAAO,aAAa;AAAA,cAC1B,mBAAiB,OAAO,GAAG,EAAE,IAAI,WAAW,KAAK;AAAA,cACjD,WAAW,QAAQ;AAAA,cAElB;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,QAAQ,QAAQ;AAAA,UAC5B,CAAC,QAAQ,UAAU,GAAG;AAAA,UACtB,CAAC,QAAQ,WAAW,GAAG,CAAC;AAAA,QAAA,CACzB;AAAA,QACD,SAAS;AAAA,QACT,MAAK;AAAA,QACL,UAAU;AAAA,QACV,WAAW,CAAC,MAAM;AAChB,cAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,8BAAkB,CAAC;AAAA,UACrB;AAAA,QACF;AAAA,QACA,cAAY,OAAO,OAAO,QAAQ,OAAO;AAAA,QAEzC,8BAAC,OAAI,EAAA,WAAW,QAAQ,cACrB,UAAA,2BAAQ,OAAM,EAAA,OAAO,CAAC,SAAS,GAAG,IAAM,oBAAA,KAAA,EAAI,OAAO,CAAC,SAAS,EAAG,CAAA,GACnE;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ,CAAC;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createClasses, theme, outlineStyles } from "@hitachivantara/uikit-react-core";
|
|
2
|
+
const { staticClasses, useClasses } = createClasses(
|
|
3
|
+
"HvCanvasSidePanel",
|
|
4
|
+
{
|
|
5
|
+
root: {
|
|
6
|
+
height: "100%",
|
|
7
|
+
position: "absolute",
|
|
8
|
+
top: 0,
|
|
9
|
+
left: 0,
|
|
10
|
+
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
11
|
+
backgroundColor: "transparent",
|
|
12
|
+
transition: "visibility 0.3s ease, width 0.3s ease",
|
|
13
|
+
overflow: "hidden",
|
|
14
|
+
"&$open": {
|
|
15
|
+
width: 320,
|
|
16
|
+
visibility: "visible"
|
|
17
|
+
},
|
|
18
|
+
"&$close": {
|
|
19
|
+
width: 0,
|
|
20
|
+
visibility: "hidden"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
tabs: {},
|
|
24
|
+
content: {
|
|
25
|
+
height: "100%"
|
|
26
|
+
},
|
|
27
|
+
handle: {
|
|
28
|
+
height: "172px",
|
|
29
|
+
width: "35px",
|
|
30
|
+
display: "flex",
|
|
31
|
+
justifyContent: "center",
|
|
32
|
+
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
33
|
+
backgroundColor: theme.colors.atmo1,
|
|
34
|
+
borderRadius: "0px 16px 16px 0px",
|
|
35
|
+
position: "absolute",
|
|
36
|
+
transition: "left 0.3s ease",
|
|
37
|
+
top: "calc(50% - 86px)",
|
|
38
|
+
"&$handleOpen": {
|
|
39
|
+
left: 320
|
|
40
|
+
},
|
|
41
|
+
"&$handleClose": {
|
|
42
|
+
left: 0
|
|
43
|
+
},
|
|
44
|
+
"&:hover": {
|
|
45
|
+
cursor: "pointer"
|
|
46
|
+
},
|
|
47
|
+
"&:focus-visible": {
|
|
48
|
+
...outlineStyles
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
handleButton: {
|
|
52
|
+
top: "calc(50% - 16px)",
|
|
53
|
+
position: "absolute"
|
|
54
|
+
},
|
|
55
|
+
open: {},
|
|
56
|
+
close: {},
|
|
57
|
+
handleOpen: {},
|
|
58
|
+
handleClose: {}
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
export {
|
|
62
|
+
staticClasses,
|
|
63
|
+
useClasses
|
|
64
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidePanel.styles.js","sources":["../../../../src/Canvas/SidePanel/SidePanel.styles.tsx"],"sourcesContent":["import {\n createClasses,\n outlineStyles,\n theme,\n} from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\n \"HvCanvasSidePanel\",\n {\n root: {\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n left: 0,\n boxShadow:\n \"4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)\",\n backgroundColor: \"transparent\",\n transition: \"visibility 0.3s ease, width 0.3s ease\",\n overflow: \"hidden\",\n \"&$open\": {\n width: 320,\n visibility: \"visible\",\n },\n \"&$close\": {\n width: 0,\n visibility: \"hidden\",\n },\n },\n tabs: {},\n content: {\n height: \"100%\",\n },\n handle: {\n height: \"172px\",\n width: \"35px\",\n display: \"flex\",\n justifyContent: \"center\",\n boxShadow:\n \"4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)\",\n backgroundColor: theme.colors.atmo1,\n borderRadius: \"0px 16px 16px 0px\",\n position: \"absolute\",\n transition: \"left 0.3s ease\",\n top: \"calc(50% - 86px)\",\n \"&$handleOpen\": {\n left: 320,\n },\n \"&$handleClose\": {\n left: 0,\n },\n \"&:hover\": {\n cursor: \"pointer\",\n },\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n handleButton: {\n top: \"calc(50% - 16px)\",\n position: \"absolute\",\n },\n open: {},\n close: {},\n handleOpen: {},\n handleClose: {},\n },\n);\n"],"names":[],"mappings":";AAMa,MAAA,EAAE,eAAe,WAAA,IAAe;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,WACE;AAAA,MACF,iBAAiB;AAAA,MACjB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,QACR,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,MACA,WAAW;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA,MAAM,CAAC;AAAA,IACP,SAAS;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,WACE;AAAA,MACF,iBAAiB,MAAM,OAAO;AAAA,MAC9B,cAAc;AAAA,MACd,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,gBAAgB;AAAA,QACd,MAAM;AAAA,MACR;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,mBAAmB;AAAA,QACjB,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,IACZ;AAAA,IACA,MAAM,CAAC;AAAA,IACP,OAAO,CAAC;AAAA,IACR,YAAY,CAAC;AAAA,IACb,aAAa,CAAC;AAAA,EAChB;AACF;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsxs, jsx } from "
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
3
|
import { useDefaultProps, useLabels, HvIconButton, HvTypography } from "@hitachivantara/uikit-react-core";
|
|
4
4
|
import { Previous } from "@hitachivantara/uikit-react-icons";
|
package/dist/esm/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { staticClasses } from "./Canvas/Toolbar/Toolbar.styles.js";
|
|
2
2
|
import { HvCanvasToolbar } from "./Canvas/Toolbar/Toolbar.js";
|
|
3
|
-
import { staticClasses as staticClasses2 } from "./Canvas/
|
|
4
|
-
import {
|
|
3
|
+
import { staticClasses as staticClasses2 } from "./Canvas/SidePanel/SidePanel.styles.js";
|
|
4
|
+
import { HvCanvasSidePanel } from "./Canvas/SidePanel/SidePanel.js";
|
|
5
5
|
import { staticClasses as staticClasses3 } from "./Canvas/Tabs/Tabs.styles.js";
|
|
6
6
|
import { HvCanvasTabs } from "./Canvas/Tabs/Tabs.js";
|
|
7
|
-
import { staticClasses as staticClasses4 } from "./Canvas/
|
|
8
|
-
import {
|
|
7
|
+
import { staticClasses as staticClasses4 } from "./Canvas/BottomPanel/BottomPanel.styles.js";
|
|
8
|
+
import { HvCanvasBottomPanel } from "./Canvas/BottomPanel/BottomPanel.js";
|
|
9
9
|
import { staticClasses as staticClasses5 } from "./Canvas/Tab/Tab.styles.js";
|
|
10
10
|
import { HvCanvasTab } from "./Canvas/Tab/Tab.js";
|
|
11
11
|
export {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
HvCanvasBottomPanel,
|
|
13
|
+
HvCanvasSidePanel,
|
|
14
14
|
HvCanvasTab,
|
|
15
15
|
HvCanvasTabs,
|
|
16
16
|
HvCanvasToolbar,
|
|
17
|
-
|
|
17
|
+
staticClasses4 as canvasBottomPanelClasses,
|
|
18
|
+
staticClasses2 as canvasSidePanelClasses,
|
|
18
19
|
staticClasses5 as canvasTabClasses,
|
|
19
20
|
staticClasses3 as canvasTabsClasses,
|
|
20
|
-
staticClasses as canvasToolbarClasses
|
|
21
|
-
staticClasses4 as floatingPanelClasses
|
|
21
|
+
staticClasses as canvasToolbarClasses
|
|
22
22
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -9,16 +9,30 @@ import { RefAttributes } from 'react';
|
|
|
9
9
|
import { TabProps } from '@mui/base/Tab';
|
|
10
10
|
import { TabsProps } from '@mui/base/Tabs';
|
|
11
11
|
|
|
12
|
-
export declare const
|
|
13
|
-
content: "
|
|
14
|
-
root: "
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
export declare const canvasBottomPanelClasses: {
|
|
13
|
+
content: "HvCanvasBottomPanel-content";
|
|
14
|
+
root: "HvCanvasBottomPanel-root";
|
|
15
|
+
tab: "HvCanvasBottomPanel-tab";
|
|
16
|
+
closed: "HvCanvasBottomPanel-closed";
|
|
17
|
+
minimized: "HvCanvasBottomPanel-minimized";
|
|
18
|
+
multipleTabs: "HvCanvasBottomPanel-multipleTabs";
|
|
19
|
+
overflowing: "HvCanvasBottomPanel-overflowing";
|
|
20
|
+
tabTitle: "HvCanvasBottomPanel-tabTitle";
|
|
21
|
+
tabsRoot: "HvCanvasBottomPanel-tabsRoot";
|
|
22
|
+
leftActions: "HvCanvasBottomPanel-leftActions";
|
|
23
|
+
rightActions: "HvCanvasBottomPanel-rightActions";
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export declare const canvasSidePanelClasses: {
|
|
27
|
+
content: "HvCanvasSidePanel-content";
|
|
28
|
+
root: "HvCanvasSidePanel-root";
|
|
29
|
+
open: "HvCanvasSidePanel-open";
|
|
30
|
+
close: "HvCanvasSidePanel-close";
|
|
31
|
+
handle: "HvCanvasSidePanel-handle";
|
|
32
|
+
tabs: "HvCanvasSidePanel-tabs";
|
|
33
|
+
handleButton: "HvCanvasSidePanel-handleButton";
|
|
34
|
+
handleOpen: "HvCanvasSidePanel-handleOpen";
|
|
35
|
+
handleClose: "HvCanvasSidePanel-handleClose";
|
|
22
36
|
};
|
|
23
37
|
|
|
24
38
|
export declare const canvasTabClasses: {
|
|
@@ -46,31 +60,17 @@ declare const DEFAULT_LABELS_2: {
|
|
|
46
60
|
close: string;
|
|
47
61
|
};
|
|
48
62
|
|
|
49
|
-
export declare const floatingPanelClasses: {
|
|
50
|
-
content: "HvCanvasFloatingPanel-content";
|
|
51
|
-
root: "HvCanvasFloatingPanel-root";
|
|
52
|
-
tab: "HvCanvasFloatingPanel-tab";
|
|
53
|
-
closed: "HvCanvasFloatingPanel-closed";
|
|
54
|
-
minimized: "HvCanvasFloatingPanel-minimized";
|
|
55
|
-
multipleTabs: "HvCanvasFloatingPanel-multipleTabs";
|
|
56
|
-
overflowing: "HvCanvasFloatingPanel-overflowing";
|
|
57
|
-
tabTitle: "HvCanvasFloatingPanel-tabTitle";
|
|
58
|
-
tabsRoot: "HvCanvasFloatingPanel-tabsRoot";
|
|
59
|
-
leftActions: "HvCanvasFloatingPanel-leftActions";
|
|
60
|
-
rightActions: "HvCanvasFloatingPanel-rightActions";
|
|
61
|
-
};
|
|
62
|
-
|
|
63
63
|
/**
|
|
64
|
-
* A
|
|
64
|
+
* A bottom panel component to use in a canvas context.
|
|
65
65
|
*/
|
|
66
|
-
export declare const
|
|
66
|
+
export declare const HvCanvasBottomPanel: ForwardRefExoticComponent<HvCanvasBottomPanelProps & RefAttributes<HTMLDivElement>>;
|
|
67
67
|
|
|
68
|
-
export declare type
|
|
68
|
+
export declare type HvCanvasBottomPanelClasses = ExtractNames<typeof useClasses_4>;
|
|
69
69
|
|
|
70
|
-
export declare interface
|
|
71
|
-
/** Open state of the
|
|
70
|
+
export declare interface HvCanvasBottomPanelProps extends HvBaseProps {
|
|
71
|
+
/** Open state of the bottom panel. */
|
|
72
72
|
open?: boolean;
|
|
73
|
-
/** Minimize state of the
|
|
73
|
+
/** Minimize state of the bottom panel tabs'. */
|
|
74
74
|
minimize?: boolean;
|
|
75
75
|
/** List of tabs visible on the panel. */
|
|
76
76
|
tabs: {
|
|
@@ -88,17 +88,17 @@ export declare interface HvCanvasFloatingPanelProps extends HvBaseProps {
|
|
|
88
88
|
/** Callback triggered when a right or left action is clicked. */
|
|
89
89
|
onAction?: (event: React.SyntheticEvent, action: HvActionGeneric, tabId: string | number) => void;
|
|
90
90
|
/** A Jss Object used to override or extend the styles applied. */
|
|
91
|
-
classes?:
|
|
91
|
+
classes?: HvCanvasBottomPanelClasses;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* A panel component to use in a canvas context.
|
|
95
|
+
* A side panel component to use in a canvas context.
|
|
96
96
|
*/
|
|
97
|
-
export declare const
|
|
97
|
+
export declare const HvCanvasSidePanel: ForwardRefExoticComponent<HvCanvasSidePanelProps & RefAttributes<HTMLDivElement>>;
|
|
98
98
|
|
|
99
|
-
export declare type
|
|
99
|
+
export declare type HvCanvasSidePanelClasses = ExtractNames<typeof useClasses_2>;
|
|
100
100
|
|
|
101
|
-
export declare interface
|
|
101
|
+
export declare interface HvCanvasSidePanelProps extends HvBaseProps<HTMLDivElement> {
|
|
102
102
|
/** When controlled, defines id the panel is open or not. */
|
|
103
103
|
open?: boolean;
|
|
104
104
|
/** When uncontrolled, defines the initial state of the panel. */
|
|
@@ -119,7 +119,7 @@ export declare interface HvCanvasPanelProps extends HvBaseProps<HTMLDivElement>
|
|
|
119
119
|
/** The content that will be rendered within the canvas panel. */
|
|
120
120
|
children?: React.ReactNode;
|
|
121
121
|
/** A Jss Object used to override or extend the styles applied. */
|
|
122
|
-
classes?:
|
|
122
|
+
classes?: HvCanvasSidePanelClasses;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hitachivantara/uikit-react-pentaho",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Hitachi Vantara UI Kit Team",
|
|
6
6
|
"description": "UI Kit Pentaho+ React components.",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@emotion/css": "^11.11.0",
|
|
33
|
-
"@hitachivantara/uikit-react-core": "^5.66.
|
|
34
|
-
"@hitachivantara/uikit-react-icons": "^5.10.
|
|
33
|
+
"@hitachivantara/uikit-react-core": "^5.66.11",
|
|
34
|
+
"@hitachivantara/uikit-react-icons": "^5.10.3",
|
|
35
35
|
"@mui/base": "^5.0.0-beta.40",
|
|
36
36
|
"react-resize-detector": "^8.1.0"
|
|
37
37
|
},
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"access": "public",
|
|
43
43
|
"directory": "package"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "3786c516514ce5870060b8ebb14199906aa85e58",
|
|
46
46
|
"exports": {
|
|
47
47
|
".": {
|
|
48
48
|
"require": "./dist/cjs/index.cjs",
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
-
const react = require("react");
|
|
5
|
-
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
6
|
-
const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
|
|
7
|
-
const Panel_styles = require("./Panel.styles.cjs");
|
|
8
|
-
const Tabs = require("../Tabs/Tabs.cjs");
|
|
9
|
-
const Tab = require("../Tab/Tab.cjs");
|
|
10
|
-
const DEFAULT_LABELS = {
|
|
11
|
-
open: "Open",
|
|
12
|
-
close: "Close"
|
|
13
|
-
};
|
|
14
|
-
const HvCanvasPanel = react.forwardRef(
|
|
15
|
-
(props, ref) => {
|
|
16
|
-
const {
|
|
17
|
-
id: idProp,
|
|
18
|
-
tab: tabProp,
|
|
19
|
-
open: openProp,
|
|
20
|
-
defaultOpen = false,
|
|
21
|
-
tabs,
|
|
22
|
-
onToggle,
|
|
23
|
-
onTabChange,
|
|
24
|
-
labels: labelsProp,
|
|
25
|
-
className,
|
|
26
|
-
children,
|
|
27
|
-
classes: classesProp,
|
|
28
|
-
...others
|
|
29
|
-
} = uikitReactCore.useDefaultProps("HvCanvasPanel", props);
|
|
30
|
-
const id = uikitReactCore.useUniqueId(idProp);
|
|
31
|
-
const { classes, cx } = Panel_styles.useClasses(classesProp);
|
|
32
|
-
const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
|
|
33
|
-
const [open, setOpen] = uikitReactCore.useControlled(openProp, Boolean(defaultOpen));
|
|
34
|
-
const [selectedTab, setSelectedTab] = uikitReactCore.useControlled(
|
|
35
|
-
tabProp,
|
|
36
|
-
tabs?.[0]?.id ?? "none"
|
|
37
|
-
);
|
|
38
|
-
const handleTogglePanel = (event) => {
|
|
39
|
-
setOpen((prev) => !prev);
|
|
40
|
-
onToggle?.(event, !open);
|
|
41
|
-
};
|
|
42
|
-
const handleTabChange = (event, tabId) => {
|
|
43
|
-
setSelectedTab(tabId);
|
|
44
|
-
onTabChange?.(event, tabId);
|
|
45
|
-
};
|
|
46
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
47
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
48
|
-
"div",
|
|
49
|
-
{
|
|
50
|
-
ref,
|
|
51
|
-
id,
|
|
52
|
-
className: cx(classes.root, className, {
|
|
53
|
-
[classes.open]: open,
|
|
54
|
-
[classes.close]: !open
|
|
55
|
-
}),
|
|
56
|
-
...others,
|
|
57
|
-
children: [
|
|
58
|
-
tabs && /* @__PURE__ */ jsxRuntime.jsx(
|
|
59
|
-
Tabs.HvCanvasTabs,
|
|
60
|
-
{
|
|
61
|
-
className: classes.tabs,
|
|
62
|
-
value: selectedTab,
|
|
63
|
-
onChange: handleTabChange,
|
|
64
|
-
children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
-
Tab.HvCanvasTab,
|
|
66
|
-
{
|
|
67
|
-
id: `${id}-${tab.id}`,
|
|
68
|
-
value: tab.id,
|
|
69
|
-
tabIndex: 0,
|
|
70
|
-
children: tab.content
|
|
71
|
-
},
|
|
72
|
-
tab.id
|
|
73
|
-
))
|
|
74
|
-
}
|
|
75
|
-
),
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
-
uikitReactCore.HvPanel,
|
|
78
|
-
{
|
|
79
|
-
role: tabs ? "tabpanel" : void 0,
|
|
80
|
-
"aria-labelledby": tabs ? `${id}-${selectedTab}` : void 0,
|
|
81
|
-
className: classes.content,
|
|
82
|
-
children
|
|
83
|
-
}
|
|
84
|
-
)
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
),
|
|
88
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
-
"div",
|
|
90
|
-
{
|
|
91
|
-
className: cx(classes.handle, {
|
|
92
|
-
[classes.handleOpen]: open,
|
|
93
|
-
[classes.handleClose]: !open
|
|
94
|
-
}),
|
|
95
|
-
onClick: handleTogglePanel,
|
|
96
|
-
role: "button",
|
|
97
|
-
tabIndex: 0,
|
|
98
|
-
onKeyDown: (e) => {
|
|
99
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
100
|
-
handleTogglePanel(e);
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
"aria-label": open ? labels.close : labels.open,
|
|
104
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Start, { color: ["primary"] }) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.End, { color: ["primary"] }) })
|
|
105
|
-
}
|
|
106
|
-
)
|
|
107
|
-
] });
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
exports.canvasPanelClasses = Panel_styles.staticClasses;
|
|
111
|
-
exports.HvCanvasPanel = HvCanvasPanel;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
4
|
-
const { staticClasses, useClasses } = uikitReactCore.createClasses("HvCanvasPanel", {
|
|
5
|
-
root: {
|
|
6
|
-
height: "100%",
|
|
7
|
-
position: "absolute",
|
|
8
|
-
top: 0,
|
|
9
|
-
left: 0,
|
|
10
|
-
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
11
|
-
backgroundColor: "transparent",
|
|
12
|
-
transition: "visibility 0.3s ease, width 0.3s ease",
|
|
13
|
-
overflow: "hidden",
|
|
14
|
-
"&$open": {
|
|
15
|
-
width: 320,
|
|
16
|
-
visibility: "visible"
|
|
17
|
-
},
|
|
18
|
-
"&$close": {
|
|
19
|
-
width: 0,
|
|
20
|
-
visibility: "hidden"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
tabs: {},
|
|
24
|
-
content: {
|
|
25
|
-
height: "100%"
|
|
26
|
-
},
|
|
27
|
-
handle: {
|
|
28
|
-
height: "172px",
|
|
29
|
-
width: "35px",
|
|
30
|
-
display: "flex",
|
|
31
|
-
justifyContent: "center",
|
|
32
|
-
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
33
|
-
backgroundColor: uikitReactCore.theme.colors.atmo1,
|
|
34
|
-
borderRadius: "0px 16px 16px 0px",
|
|
35
|
-
position: "absolute",
|
|
36
|
-
transition: "left 0.3s ease",
|
|
37
|
-
top: "calc(50% - 86px)",
|
|
38
|
-
"&$handleOpen": {
|
|
39
|
-
left: 320
|
|
40
|
-
},
|
|
41
|
-
"&$handleClose": {
|
|
42
|
-
left: 0
|
|
43
|
-
},
|
|
44
|
-
"&:hover": {
|
|
45
|
-
cursor: "pointer"
|
|
46
|
-
},
|
|
47
|
-
"&:focus-visible": {
|
|
48
|
-
...uikitReactCore.outlineStyles
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
handleButton: {
|
|
52
|
-
top: "calc(50% - 16px)",
|
|
53
|
-
position: "absolute"
|
|
54
|
-
},
|
|
55
|
-
open: {},
|
|
56
|
-
close: {},
|
|
57
|
-
handleOpen: {},
|
|
58
|
-
handleClose: {}
|
|
59
|
-
});
|
|
60
|
-
exports.staticClasses = staticClasses;
|
|
61
|
-
exports.useClasses = useClasses;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.js","sources":["../../../../src/Canvas/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { forwardRef, useMemo } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport {\n ExtractNames,\n HvActionGeneric,\n HvActionsGeneric,\n HvActionsGenericProps,\n HvBaseProps,\n HvPanel,\n useControlled,\n useDefaultProps,\n useUniqueId,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { HvCanvasTab } from \"../Tab\";\nimport { HvCanvasTabs, HvCanvasTabsProps } from \"../Tabs\";\nimport { staticClasses, useClasses } from \"./FloatingPanel.styles\";\n\nexport { staticClasses as floatingPanelClasses };\n\nexport type HvCanvasFloatingPanelClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvCanvasFloatingPanelProps extends HvBaseProps {\n /** Open state of the floating panel. */\n open?: boolean;\n /** Minimize state of the floating panel tabs'. */\n minimize?: boolean;\n /** List of tabs visible on the panel. */\n tabs: {\n id: string | number;\n title: React.ReactNode;\n }[];\n /** Id of the selected tab if it needs to be controlled. */\n tab?: string | number;\n /** Callback triggered when a tab changes/is clicked. */\n onTabChange?: (\n event: React.SyntheticEvent | null,\n tabId: string | number | null,\n ) => void;\n /** Actions to be rendered in the left side of a tab. If more than one action is provided, a dropdown menu will be used. */\n leftActions?: HvActionsGenericProps[\"actions\"];\n /** Actions to be rendered in the right side of a tab.If more than two actions are provided, a dropdown menu will be used to add the remaining actions. */\n rightActions?: HvActionsGenericProps[\"actions\"];\n /** Callback triggered when a right or left action is clicked. */\n onAction?: (\n event: React.SyntheticEvent,\n action: HvActionGeneric,\n tabId: string | number,\n ) => void;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasFloatingPanelClasses;\n}\n\n/**\n * A floating panel component to use in a canvas context.\n */\nexport const HvCanvasFloatingPanel = forwardRef<\n HTMLDivElement,\n HvCanvasFloatingPanelProps\n>((props, ref) => {\n const {\n id: idProp,\n className,\n children,\n open,\n tabs,\n minimize,\n leftActions,\n rightActions,\n tab: tabProp,\n classes: classesProp,\n onTabChange,\n onAction,\n ...others\n } = useDefaultProps(\"HvCanvasFloatingPanel\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const id = useUniqueId(idProp);\n\n // Tab resize detector: to position tab actions and set the panel top right border radius\n const { width: tabWidth = 0, ref: tabRef } = useResizeDetector({\n handleHeight: false,\n });\n // Tab panel resize detector: to set the panel top right border radius\n const { width: panelWidth = 0, ref: panelRef } = useResizeDetector({\n handleHeight: false,\n });\n\n // Left actions resize detector: to position tab title according with actions\n const { width: leftActionWidth = 32, ref: leftActionRef } = useResizeDetector(\n {\n handleHeight: false,\n refreshMode: \"debounce\",\n refreshOptions: {\n trailing: true,\n },\n },\n );\n // Right actions resize detector: to position tab title according with actions\n const { width: rightActionWidth = 32, ref: rightActionRef } =\n useResizeDetector({\n handleHeight: false,\n refreshMode: \"debounce\",\n refreshOptions: {\n trailing: true,\n },\n });\n\n const overflowing = useMemo(() => {\n const scrollWidth = tabRef.current?.scrollWidth ?? 0;\n return scrollWidth - tabWidth >= 1;\n }, [tabRef, tabWidth]);\n\n const [selectedTab, setSelectedTab] = useControlled<string | number | null>(\n tabProp,\n tabs[0].id,\n );\n\n const handleTabChange: HvCanvasTabsProps[\"onChange\"] = (event, tabId) => {\n setSelectedTab(tabId);\n onTabChange?.(event, tabId);\n };\n\n return (\n <div\n id={id}\n ref={ref}\n className={cx(\n classes.root,\n {\n [classes.closed]: !open,\n [classes.minimized]: minimize,\n [classes.multipleTabs]: tabs.length > 1,\n [classes.overflowing]: overflowing,\n },\n className,\n )}\n {...others}\n >\n <div className={classes.tabsRoot}>\n <HvCanvasTabs\n style={{\n // @ts-ignore\n \"--left-actions-width\": `${leftActionWidth}px`,\n \"--right-actions-width\": `${rightActionWidth}px`,\n }}\n onChange={handleTabChange}\n value={selectedTab}\n >\n {tabs.map((tab, index) => (\n <HvCanvasTab\n ref={index === 0 ? tabRef : undefined}\n key={tab.id}\n id={`${id}-${tab.id}`}\n value={tab.id}\n className={classes.tab}\n >\n <div className={classes.tabTitle}>{tab.title}</div>\n </HvCanvasTab>\n ))}\n </HvCanvasTabs>\n {/* For accessibility purposes, these buttons cannot be children of a tablist so they are rendered as HvCanvasTabs sibling. */}\n {(leftActions || rightActions) && !overflowing\n ? tabs.map((tab, index) => {\n const btnsDisabled = selectedTab !== tab.id && !minimize;\n return (\n <div\n key={tab.id}\n style={{\n // @ts-ignore\n \"--tab-width\": `${tabWidth}px`,\n \"--right\": `calc((${index} + 1) * var(--tab-width))`,\n \"--left\": `calc(${index} * var(--tab-width))`,\n }}\n >\n {leftActions && (\n <div ref={leftActionRef} className={classes.leftActions}>\n <HvActionsGeneric\n maxVisibleActions={1}\n actions={leftActions}\n disabled={btnsDisabled}\n onAction={(event, action) =>\n onAction?.(event, action, tab.id)\n }\n variant=\"secondaryGhost\"\n iconOnly\n />\n </div>\n )}\n {rightActions && (\n <div ref={rightActionRef} className={classes.rightActions}>\n <HvActionsGeneric\n maxVisibleActions={2}\n actions={rightActions}\n disabled={btnsDisabled}\n onAction={(event, action) =>\n onAction?.(event, action, tab.id)\n }\n variant=\"secondaryGhost\"\n iconOnly\n />\n </div>\n )}\n </div>\n );\n })\n : null}\n </div>\n <HvPanel\n ref={panelRef}\n role=\"tabpanel\"\n aria-labelledby={`${id}-${selectedTab}`}\n className={classes.content}\n style={{\n // @ts-ignore\n \"--right-border-radius\":\n tabWidth * tabs.length >= panelWidth ? \"0px\" : \"16px\",\n }}\n >\n {children}\n </HvPanel>\n </div>\n );\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.styles.js","sources":["../../../../src/Canvas/FloatingPanel/FloatingPanel.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\n \"HvCanvasFloatingPanel\",\n {\n root: {\n position: \"absolute\",\n display: \"flex\",\n flexDirection: \"column\",\n right: 0,\n bottom: 0,\n width: \"100%\",\n maxHeight: \"500px\",\n visibility: \"visible\",\n transition: \"visibility 0.3s ease, max-height 0.3s ease, width 0.3s ease\",\n },\n closed: {\n maxHeight: 0,\n visibility: \"hidden\",\n },\n minimized: {\n \"& $content\": {\n display: \"none\",\n },\n \"& $tab\": {\n backgroundColor: theme.colors.atmo1,\n ...theme.typography.label,\n },\n },\n multipleTabs: {\n \"& $tab\": { maxWidth: \"288px\" },\n \"& $rightActions\": {\n right: `calc(100% - var(--right) + ${theme.space.xs})`,\n },\n },\n overflowing: {\n \"& $tabTitle\": {\n paddingLeft: theme.space.sm,\n paddingRight: theme.space.sm,\n },\n },\n tab: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n width: \"100%\",\n },\n tabTitle: {\n display: \"flex\",\n width: \"100%\",\n padding: theme.space.sm,\n paddingLeft: `calc(var(--left-actions-width) + ${theme.space.xs})`,\n paddingRight: `calc(var(--right-actions-width) + ${theme.space.xs})`,\n },\n tabsRoot: {\n position: \"relative\",\n },\n leftActions: {\n position: \"absolute\",\n left: `calc(var(--left) + ${theme.space.xs})`,\n top: 8,\n },\n rightActions: {\n position: \"absolute\",\n right: theme.space.xs,\n top: 8,\n },\n content: { borderTopRightRadius: \"var(--right-border-radius)\" },\n },\n);\n"],"names":[],"mappings":";AAEa,MAAA,EAAE,eAAe,WAAA,IAAe;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,eAAe;AAAA,MACf,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,YAAY;AAAA,IACd;AAAA,IACA,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,cAAc;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,MACA,UAAU;AAAA,QACR,iBAAiB,MAAM,OAAO;AAAA,QAC9B,GAAG,MAAM,WAAW;AAAA,MACtB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,UAAU,EAAE,UAAU,QAAQ;AAAA,MAC9B,mBAAmB;AAAA,QACjB,OAAO,8BAA8B,MAAM,MAAM,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,eAAe;AAAA,QACb,aAAa,MAAM,MAAM;AAAA,QACzB,cAAc,MAAM,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,KAAK;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS,MAAM,MAAM;AAAA,MACrB,aAAa,oCAAoC,MAAM,MAAM,EAAE;AAAA,MAC/D,cAAc,qCAAqC,MAAM,MAAM,EAAE;AAAA,IACnE;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,MAAM,sBAAsB,MAAM,MAAM,EAAE;AAAA,MAC1C,KAAK;AAAA,IACP;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,OAAO,MAAM,MAAM;AAAA,MACnB,KAAK;AAAA,IACP;AAAA,IACA,SAAS,EAAE,sBAAsB,6BAA6B;AAAA,EAChE;AACF;"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { jsxs, Fragment, jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { forwardRef } from "react";
|
|
3
|
-
import { useDefaultProps, useUniqueId, useLabels, useControlled, HvPanel } from "@hitachivantara/uikit-react-core";
|
|
4
|
-
import { Start, End } from "@hitachivantara/uikit-react-icons";
|
|
5
|
-
import { useClasses } from "./Panel.styles.js";
|
|
6
|
-
import { staticClasses } from "./Panel.styles.js";
|
|
7
|
-
import { HvCanvasTabs } from "../Tabs/Tabs.js";
|
|
8
|
-
import { HvCanvasTab } from "../Tab/Tab.js";
|
|
9
|
-
const DEFAULT_LABELS = {
|
|
10
|
-
open: "Open",
|
|
11
|
-
close: "Close"
|
|
12
|
-
};
|
|
13
|
-
const HvCanvasPanel = forwardRef(
|
|
14
|
-
(props, ref) => {
|
|
15
|
-
const {
|
|
16
|
-
id: idProp,
|
|
17
|
-
tab: tabProp,
|
|
18
|
-
open: openProp,
|
|
19
|
-
defaultOpen = false,
|
|
20
|
-
tabs,
|
|
21
|
-
onToggle,
|
|
22
|
-
onTabChange,
|
|
23
|
-
labels: labelsProp,
|
|
24
|
-
className,
|
|
25
|
-
children,
|
|
26
|
-
classes: classesProp,
|
|
27
|
-
...others
|
|
28
|
-
} = useDefaultProps("HvCanvasPanel", props);
|
|
29
|
-
const id = useUniqueId(idProp);
|
|
30
|
-
const { classes, cx } = useClasses(classesProp);
|
|
31
|
-
const labels = useLabels(DEFAULT_LABELS, labelsProp);
|
|
32
|
-
const [open, setOpen] = useControlled(openProp, Boolean(defaultOpen));
|
|
33
|
-
const [selectedTab, setSelectedTab] = useControlled(
|
|
34
|
-
tabProp,
|
|
35
|
-
tabs?.[0]?.id ?? "none"
|
|
36
|
-
);
|
|
37
|
-
const handleTogglePanel = (event) => {
|
|
38
|
-
setOpen((prev) => !prev);
|
|
39
|
-
onToggle?.(event, !open);
|
|
40
|
-
};
|
|
41
|
-
const handleTabChange = (event, tabId) => {
|
|
42
|
-
setSelectedTab(tabId);
|
|
43
|
-
onTabChange?.(event, tabId);
|
|
44
|
-
};
|
|
45
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
-
/* @__PURE__ */ jsxs(
|
|
47
|
-
"div",
|
|
48
|
-
{
|
|
49
|
-
ref,
|
|
50
|
-
id,
|
|
51
|
-
className: cx(classes.root, className, {
|
|
52
|
-
[classes.open]: open,
|
|
53
|
-
[classes.close]: !open
|
|
54
|
-
}),
|
|
55
|
-
...others,
|
|
56
|
-
children: [
|
|
57
|
-
tabs && /* @__PURE__ */ jsx(
|
|
58
|
-
HvCanvasTabs,
|
|
59
|
-
{
|
|
60
|
-
className: classes.tabs,
|
|
61
|
-
value: selectedTab,
|
|
62
|
-
onChange: handleTabChange,
|
|
63
|
-
children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
64
|
-
HvCanvasTab,
|
|
65
|
-
{
|
|
66
|
-
id: `${id}-${tab.id}`,
|
|
67
|
-
value: tab.id,
|
|
68
|
-
tabIndex: 0,
|
|
69
|
-
children: tab.content
|
|
70
|
-
},
|
|
71
|
-
tab.id
|
|
72
|
-
))
|
|
73
|
-
}
|
|
74
|
-
),
|
|
75
|
-
/* @__PURE__ */ jsx(
|
|
76
|
-
HvPanel,
|
|
77
|
-
{
|
|
78
|
-
role: tabs ? "tabpanel" : void 0,
|
|
79
|
-
"aria-labelledby": tabs ? `${id}-${selectedTab}` : void 0,
|
|
80
|
-
className: classes.content,
|
|
81
|
-
children
|
|
82
|
-
}
|
|
83
|
-
)
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
),
|
|
87
|
-
/* @__PURE__ */ jsx(
|
|
88
|
-
"div",
|
|
89
|
-
{
|
|
90
|
-
className: cx(classes.handle, {
|
|
91
|
-
[classes.handleOpen]: open,
|
|
92
|
-
[classes.handleClose]: !open
|
|
93
|
-
}),
|
|
94
|
-
onClick: handleTogglePanel,
|
|
95
|
-
role: "button",
|
|
96
|
-
tabIndex: 0,
|
|
97
|
-
onKeyDown: (e) => {
|
|
98
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
99
|
-
handleTogglePanel(e);
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
"aria-label": open ? labels.close : labels.open,
|
|
103
|
-
children: /* @__PURE__ */ jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsx(Start, { color: ["primary"] }) : /* @__PURE__ */ jsx(End, { color: ["primary"] }) })
|
|
104
|
-
}
|
|
105
|
-
)
|
|
106
|
-
] });
|
|
107
|
-
}
|
|
108
|
-
);
|
|
109
|
-
export {
|
|
110
|
-
HvCanvasPanel,
|
|
111
|
-
staticClasses as canvasPanelClasses
|
|
112
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","sources":["../../../../src/Canvas/Panel/Panel.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n ExtractNames,\n HvBaseProps,\n HvPanel,\n useControlled,\n useDefaultProps,\n useLabels,\n useUniqueId,\n} from \"@hitachivantara/uikit-react-core\";\nimport { End, Start } from \"@hitachivantara/uikit-react-icons\";\n\nimport { HvCanvasTab } from \"../Tab\";\nimport { HvCanvasTabs, HvCanvasTabsProps } from \"../Tabs\";\nimport { staticClasses, useClasses } from \"./Panel.styles\";\n\nexport { staticClasses as canvasPanelClasses };\n\nexport type HvCanvasPanelClasses = ExtractNames<typeof useClasses>;\n\nconst DEFAULT_LABELS = {\n open: \"Open\",\n close: \"Close\",\n};\n\nexport interface HvCanvasPanelProps extends HvBaseProps<HTMLDivElement> {\n /** When controlled, defines id the panel is open or not. */\n open?: boolean;\n /** When uncontrolled, defines the initial state of the panel. */\n defaultOpen?: boolean;\n /** List of tabs visible on the panel. */\n tabs?: {\n id: string | number;\n content: React.ReactNode;\n }[];\n /** Id of the selected tab if it needs to be controlled. */\n tab?: string | number;\n /** Callback triggered whenever the panel toggles. */\n onToggle?: (\n event: React.MouseEvent | React.KeyboardEvent,\n open: boolean,\n ) => void;\n /** Callback triggered when a tab changes/is clicked. */\n onTabChange?: (\n event: React.SyntheticEvent | null,\n tabId: string | number | null,\n ) => void;\n /** An object containing all the labels. */\n labels?: Partial<typeof DEFAULT_LABELS>;\n /** The content that will be rendered within the canvas panel. */\n children?: React.ReactNode;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasPanelClasses;\n}\n\n/**\n * A panel component to use in a canvas context.\n */\nexport const HvCanvasPanel = forwardRef<HTMLDivElement, HvCanvasPanelProps>(\n (props, ref) => {\n const {\n id: idProp,\n tab: tabProp,\n open: openProp,\n defaultOpen = false,\n tabs,\n onToggle,\n onTabChange,\n labels: labelsProp,\n className,\n children,\n classes: classesProp,\n ...others\n } = useDefaultProps(\"HvCanvasPanel\", props);\n\n const id = useUniqueId(idProp);\n\n const { classes, cx } = useClasses(classesProp);\n\n const labels = useLabels(DEFAULT_LABELS, labelsProp);\n\n const [open, setOpen] = useControlled(openProp, Boolean(defaultOpen));\n const [selectedTab, setSelectedTab] = useControlled<string | number | null>(\n tabProp,\n tabs?.[0]?.id ?? \"none\",\n );\n\n const handleTogglePanel = (\n event: React.MouseEvent | React.KeyboardEvent,\n ) => {\n setOpen((prev) => !prev);\n onToggle?.(event, !open);\n };\n\n const handleTabChange: HvCanvasTabsProps[\"onChange\"] = (event, tabId) => {\n setSelectedTab(tabId);\n onTabChange?.(event, tabId);\n };\n\n return (\n <>\n <div\n ref={ref}\n id={id}\n className={cx(classes.root, className, {\n [classes.open]: open,\n [classes.close]: !open,\n })}\n {...others}\n >\n {tabs && (\n <HvCanvasTabs\n className={classes.tabs}\n value={selectedTab}\n onChange={handleTabChange}\n >\n {tabs.map((tab) => (\n <HvCanvasTab\n key={tab.id}\n id={`${id}-${tab.id}`}\n value={tab.id}\n tabIndex={0}\n >\n {tab.content}\n </HvCanvasTab>\n ))}\n </HvCanvasTabs>\n )}\n <HvPanel\n role={tabs ? \"tabpanel\" : undefined}\n aria-labelledby={tabs ? `${id}-${selectedTab}` : undefined}\n className={classes.content}\n >\n {children}\n </HvPanel>\n </div>\n <div\n className={cx(classes.handle, {\n [classes.handleOpen]: open,\n [classes.handleClose]: !open,\n })}\n onClick={handleTogglePanel}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n handleTogglePanel(e);\n }\n }}\n aria-label={open ? labels.close : labels.open}\n >\n <div className={classes.handleButton}>\n {open ? <Start color={[\"primary\"]} /> : <End color={[\"primary\"]} />}\n </div>\n </div>\n </>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;AAoBA,MAAM,iBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,OAAO;AACT;AAmCO,MAAM,gBAAgB;AAAA,EAC3B,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,GAAG;AAAA,IAAA,IACD,gBAAgB,iBAAiB,KAAK;AAEpC,UAAA,KAAK,YAAY,MAAM;AAE7B,UAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAExC,UAAA,SAAS,UAAU,gBAAgB,UAAU;AAE7C,UAAA,CAAC,MAAM,OAAO,IAAI,cAAc,UAAU,QAAQ,WAAW,CAAC;AAC9D,UAAA,CAAC,aAAa,cAAc,IAAI;AAAA,MACpC;AAAA,MACA,OAAO,CAAC,GAAG,MAAM;AAAA,IAAA;AAGb,UAAA,oBAAoB,CACxB,UACG;AACK,cAAA,CAAC,SAAS,CAAC,IAAI;AACZ,iBAAA,OAAO,CAAC,IAAI;AAAA,IAAA;AAGnB,UAAA,kBAAiD,CAAC,OAAO,UAAU;AACvE,qBAAe,KAAK;AACpB,oBAAc,OAAO,KAAK;AAAA,IAAA;AAG5B,WAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW,GAAG,QAAQ,MAAM,WAAW;AAAA,YACrC,CAAC,QAAQ,IAAI,GAAG;AAAA,YAChB,CAAC,QAAQ,KAAK,GAAG,CAAC;AAAA,UAAA,CACnB;AAAA,UACA,GAAG;AAAA,UAEH,UAAA;AAAA,YACC,QAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,QAAQ;AAAA,gBACnB,OAAO;AAAA,gBACP,UAAU;AAAA,gBAET,UAAA,KAAK,IAAI,CAAC,QACT;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE;AAAA,oBACnB,OAAO,IAAI;AAAA,oBACX,UAAU;AAAA,oBAET,UAAI,IAAA;AAAA,kBAAA;AAAA,kBALA,IAAI;AAAA,gBAAA,CAOZ;AAAA,cAAA;AAAA,YACH;AAAA,YAEF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAM,OAAO,aAAa;AAAA,gBAC1B,mBAAiB,OAAO,GAAG,EAAE,IAAI,WAAW,KAAK;AAAA,gBACjD,WAAW,QAAQ;AAAA,gBAElB;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,GAAG,QAAQ,QAAQ;AAAA,YAC5B,CAAC,QAAQ,UAAU,GAAG;AAAA,YACtB,CAAC,QAAQ,WAAW,GAAG,CAAC;AAAA,UAAA,CACzB;AAAA,UACD,SAAS;AAAA,UACT,MAAK;AAAA,UACL,UAAU;AAAA,UACV,WAAW,CAAC,MAAM;AAChB,gBAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,gCAAkB,CAAC;AAAA,YACrB;AAAA,UACF;AAAA,UACA,cAAY,OAAO,OAAO,QAAQ,OAAO;AAAA,UAEzC,8BAAC,OAAI,EAAA,WAAW,QAAQ,cACrB,UAAA,2BAAQ,OAAM,EAAA,OAAO,CAAC,SAAS,GAAG,IAAM,oBAAA,KAAA,EAAI,OAAO,CAAC,SAAS,EAAG,CAAA,GACnE;AAAA,QAAA;AAAA,MACF;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AACF;"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { createClasses, theme, outlineStyles } from "@hitachivantara/uikit-react-core";
|
|
2
|
-
const { staticClasses, useClasses } = createClasses("HvCanvasPanel", {
|
|
3
|
-
root: {
|
|
4
|
-
height: "100%",
|
|
5
|
-
position: "absolute",
|
|
6
|
-
top: 0,
|
|
7
|
-
left: 0,
|
|
8
|
-
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
9
|
-
backgroundColor: "transparent",
|
|
10
|
-
transition: "visibility 0.3s ease, width 0.3s ease",
|
|
11
|
-
overflow: "hidden",
|
|
12
|
-
"&$open": {
|
|
13
|
-
width: 320,
|
|
14
|
-
visibility: "visible"
|
|
15
|
-
},
|
|
16
|
-
"&$close": {
|
|
17
|
-
width: 0,
|
|
18
|
-
visibility: "hidden"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
tabs: {},
|
|
22
|
-
content: {
|
|
23
|
-
height: "100%"
|
|
24
|
-
},
|
|
25
|
-
handle: {
|
|
26
|
-
height: "172px",
|
|
27
|
-
width: "35px",
|
|
28
|
-
display: "flex",
|
|
29
|
-
justifyContent: "center",
|
|
30
|
-
boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
|
|
31
|
-
backgroundColor: theme.colors.atmo1,
|
|
32
|
-
borderRadius: "0px 16px 16px 0px",
|
|
33
|
-
position: "absolute",
|
|
34
|
-
transition: "left 0.3s ease",
|
|
35
|
-
top: "calc(50% - 86px)",
|
|
36
|
-
"&$handleOpen": {
|
|
37
|
-
left: 320
|
|
38
|
-
},
|
|
39
|
-
"&$handleClose": {
|
|
40
|
-
left: 0
|
|
41
|
-
},
|
|
42
|
-
"&:hover": {
|
|
43
|
-
cursor: "pointer"
|
|
44
|
-
},
|
|
45
|
-
"&:focus-visible": {
|
|
46
|
-
...outlineStyles
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
handleButton: {
|
|
50
|
-
top: "calc(50% - 16px)",
|
|
51
|
-
position: "absolute"
|
|
52
|
-
},
|
|
53
|
-
open: {},
|
|
54
|
-
close: {},
|
|
55
|
-
handleOpen: {},
|
|
56
|
-
handleClose: {}
|
|
57
|
-
});
|
|
58
|
-
export {
|
|
59
|
-
staticClasses,
|
|
60
|
-
useClasses
|
|
61
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.styles.js","sources":["../../../../src/Canvas/Panel/Panel.styles.tsx"],"sourcesContent":["import {\n createClasses,\n outlineStyles,\n theme,\n} from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvCanvasPanel\", {\n root: {\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n left: 0,\n boxShadow: \"4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)\",\n backgroundColor: \"transparent\",\n transition: \"visibility 0.3s ease, width 0.3s ease\",\n overflow: \"hidden\",\n \"&$open\": {\n width: 320,\n visibility: \"visible\",\n },\n \"&$close\": {\n width: 0,\n visibility: \"hidden\",\n },\n },\n tabs: {},\n content: {\n height: \"100%\",\n },\n handle: {\n height: \"172px\",\n width: \"35px\",\n display: \"flex\",\n justifyContent: \"center\",\n boxShadow: \"4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)\",\n backgroundColor: theme.colors.atmo1,\n borderRadius: \"0px 16px 16px 0px\",\n position: \"absolute\",\n transition: \"left 0.3s ease\",\n top: \"calc(50% - 86px)\",\n \"&$handleOpen\": {\n left: 320,\n },\n \"&$handleClose\": {\n left: 0,\n },\n \"&:hover\": {\n cursor: \"pointer\",\n },\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n handleButton: {\n top: \"calc(50% - 16px)\",\n position: \"absolute\",\n },\n open: {},\n close: {},\n handleOpen: {},\n handleClose: {},\n});\n"],"names":[],"mappings":";AAMO,MAAM,EAAE,eAAe,eAAe,cAAc,iBAAiB;AAAA,EAC1E,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACR,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,MAAM,CAAC;AAAA,EACP,SAAS;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,iBAAiB,MAAM,OAAO;AAAA,IAC9B,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,gBAAgB;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM,CAAC;AAAA,EACP,OAAO,CAAC;AAAA,EACR,YAAY,CAAC;AAAA,EACb,aAAa,CAAC;AAChB,CAAC;"}
|