@hitachivantara/uikit-react-pentaho 0.1.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 (36) hide show
  1. package/README.md +11 -0
  2. package/dist/cjs/Canvas/FloatingPanel/FloatingPanel.cjs +162 -0
  3. package/dist/cjs/Canvas/FloatingPanel/FloatingPanel.styles.cjs +73 -0
  4. package/dist/cjs/Canvas/Panel/Panel.cjs +111 -0
  5. package/dist/cjs/Canvas/Panel/Panel.styles.cjs +61 -0
  6. package/dist/cjs/Canvas/Tab/Tab.cjs +20 -0
  7. package/dist/cjs/Canvas/Tab/Tab.styles.cjs +39 -0
  8. package/dist/cjs/Canvas/Tabs/Tabs.cjs +32 -0
  9. package/dist/cjs/Canvas/Tabs/Tabs.styles.cjs +13 -0
  10. package/dist/cjs/Canvas/Toolbar/Toolbar.cjs +42 -0
  11. package/dist/cjs/Canvas/Toolbar/Toolbar.styles.cjs +41 -0
  12. package/dist/cjs/index.cjs +22 -0
  13. package/dist/esm/Canvas/FloatingPanel/FloatingPanel.js +163 -0
  14. package/dist/esm/Canvas/FloatingPanel/FloatingPanel.js.map +1 -0
  15. package/dist/esm/Canvas/FloatingPanel/FloatingPanel.styles.js +73 -0
  16. package/dist/esm/Canvas/FloatingPanel/FloatingPanel.styles.js.map +1 -0
  17. package/dist/esm/Canvas/Panel/Panel.js +112 -0
  18. package/dist/esm/Canvas/Panel/Panel.js.map +1 -0
  19. package/dist/esm/Canvas/Panel/Panel.styles.js +61 -0
  20. package/dist/esm/Canvas/Panel/Panel.styles.js.map +1 -0
  21. package/dist/esm/Canvas/Tab/Tab.js +21 -0
  22. package/dist/esm/Canvas/Tab/Tab.js.map +1 -0
  23. package/dist/esm/Canvas/Tab/Tab.styles.js +39 -0
  24. package/dist/esm/Canvas/Tab/Tab.styles.js.map +1 -0
  25. package/dist/esm/Canvas/Tabs/Tabs.js +33 -0
  26. package/dist/esm/Canvas/Tabs/Tabs.js.map +1 -0
  27. package/dist/esm/Canvas/Tabs/Tabs.styles.js +13 -0
  28. package/dist/esm/Canvas/Tabs/Tabs.styles.js.map +1 -0
  29. package/dist/esm/Canvas/Toolbar/Toolbar.js +43 -0
  30. package/dist/esm/Canvas/Toolbar/Toolbar.js.map +1 -0
  31. package/dist/esm/Canvas/Toolbar/Toolbar.styles.js +41 -0
  32. package/dist/esm/Canvas/Toolbar/Toolbar.styles.js.map +1 -0
  33. package/dist/esm/index.js +22 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/types/index.d.ts +247 -0
  36. package/package.json +54 -0
@@ -0,0 +1,163 @@
1
+ import { jsxs, jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef, useMemo } from "react";
3
+ import { useResizeDetector } from "react-resize-detector";
4
+ import { useDefaultProps, useUniqueId, useControlled, HvActionsGeneric, HvPanel } from "@hitachivantara/uikit-react-core";
5
+ import { useClasses } from "./FloatingPanel.styles.js";
6
+ import { staticClasses } from "./FloatingPanel.styles.js";
7
+ import { HvCanvasTabs } from "../Tabs/Tabs.js";
8
+ import { HvCanvasTab } from "../Tab/Tab.js";
9
+ const HvCanvasFloatingPanel = forwardRef((props, ref) => {
10
+ const {
11
+ id: idProp,
12
+ className,
13
+ children,
14
+ open,
15
+ tabs,
16
+ minimize,
17
+ leftActions,
18
+ rightActions,
19
+ tab: tabProp,
20
+ classes: classesProp,
21
+ onTabChange,
22
+ onAction,
23
+ ...others
24
+ } = useDefaultProps("HvCanvasFloatingPanel", props);
25
+ const { classes, cx } = useClasses(classesProp);
26
+ const id = useUniqueId(idProp);
27
+ const { width: tabWidth = 0, ref: tabRef } = useResizeDetector({
28
+ handleHeight: false
29
+ });
30
+ const { width: panelWidth = 0, ref: panelRef } = useResizeDetector({
31
+ handleHeight: false
32
+ });
33
+ const { width: leftActionWidth = 32, ref: leftActionRef } = useResizeDetector(
34
+ {
35
+ handleHeight: false,
36
+ refreshMode: "debounce",
37
+ refreshOptions: {
38
+ trailing: true
39
+ }
40
+ }
41
+ );
42
+ const { width: rightActionWidth = 32, ref: rightActionRef } = useResizeDetector({
43
+ handleHeight: false,
44
+ refreshMode: "debounce",
45
+ refreshOptions: {
46
+ trailing: true
47
+ }
48
+ });
49
+ const overflowing = useMemo(() => {
50
+ const scrollWidth = tabRef.current?.scrollWidth ?? 0;
51
+ return scrollWidth - tabWidth >= 1;
52
+ }, [tabRef, tabWidth]);
53
+ const [selectedTab, setSelectedTab] = useControlled(
54
+ tabProp,
55
+ tabs[0].id
56
+ );
57
+ const handleTabChange = (event, tabId) => {
58
+ setSelectedTab(tabId);
59
+ onTabChange?.(event, tabId);
60
+ };
61
+ return /* @__PURE__ */ jsxs(
62
+ "div",
63
+ {
64
+ id,
65
+ ref,
66
+ className: cx(
67
+ classes.root,
68
+ {
69
+ [classes.closed]: !open,
70
+ [classes.minimized]: minimize,
71
+ [classes.multipleTabs]: tabs.length > 1,
72
+ [classes.overflowing]: overflowing
73
+ },
74
+ className
75
+ ),
76
+ ...others,
77
+ children: [
78
+ /* @__PURE__ */ jsxs("div", { className: classes.tabsRoot, children: [
79
+ /* @__PURE__ */ jsx(
80
+ HvCanvasTabs,
81
+ {
82
+ style: {
83
+ // @ts-ignore
84
+ "--left-actions-width": `${leftActionWidth}px`,
85
+ "--right-actions-width": `${rightActionWidth}px`
86
+ },
87
+ onChange: handleTabChange,
88
+ value: selectedTab,
89
+ children: tabs.map((tab, index) => /* @__PURE__ */ jsx(
90
+ HvCanvasTab,
91
+ {
92
+ ref: index === 0 ? tabRef : void 0,
93
+ id: `${id}-${tab.id}`,
94
+ value: tab.id,
95
+ className: classes.tab,
96
+ children: /* @__PURE__ */ jsx("div", { className: classes.tabTitle, children: tab.title })
97
+ },
98
+ tab.id
99
+ ))
100
+ }
101
+ ),
102
+ (leftActions || rightActions) && !overflowing ? tabs.map((tab, index) => {
103
+ const btnsDisabled = selectedTab !== tab.id && !minimize;
104
+ return /* @__PURE__ */ jsxs(
105
+ "div",
106
+ {
107
+ style: {
108
+ // @ts-ignore
109
+ "--tab-width": `${tabWidth}px`,
110
+ "--right": `calc((${index} + 1) * var(--tab-width))`,
111
+ "--left": `calc(${index} * var(--tab-width))`
112
+ },
113
+ children: [
114
+ leftActions && /* @__PURE__ */ jsx("div", { ref: leftActionRef, className: classes.leftActions, children: /* @__PURE__ */ jsx(
115
+ HvActionsGeneric,
116
+ {
117
+ maxVisibleActions: 1,
118
+ actions: leftActions,
119
+ disabled: btnsDisabled,
120
+ onAction: (event, action) => onAction?.(event, action, tab.id),
121
+ variant: "secondaryGhost",
122
+ iconOnly: true
123
+ }
124
+ ) }),
125
+ rightActions && /* @__PURE__ */ jsx("div", { ref: rightActionRef, className: classes.rightActions, children: /* @__PURE__ */ jsx(
126
+ HvActionsGeneric,
127
+ {
128
+ maxVisibleActions: 2,
129
+ actions: rightActions,
130
+ disabled: btnsDisabled,
131
+ onAction: (event, action) => onAction?.(event, action, tab.id),
132
+ variant: "secondaryGhost",
133
+ iconOnly: true
134
+ }
135
+ ) })
136
+ ]
137
+ },
138
+ tab.id
139
+ );
140
+ }) : null
141
+ ] }),
142
+ /* @__PURE__ */ jsx(
143
+ HvPanel,
144
+ {
145
+ ref: panelRef,
146
+ role: "tabpanel",
147
+ "aria-labelledby": `${id}-${selectedTab}`,
148
+ className: classes.content,
149
+ style: {
150
+ // @ts-ignore
151
+ "--right-border-radius": tabWidth * tabs.length >= panelWidth ? "0px" : "16px"
152
+ },
153
+ children
154
+ }
155
+ )
156
+ ]
157
+ }
158
+ );
159
+ });
160
+ export {
161
+ HvCanvasFloatingPanel,
162
+ staticClasses as floatingPanelClasses
163
+ };
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,73 @@
1
+ import { createClasses, theme } from "@hitachivantara/uikit-react-core";
2
+ const { staticClasses, useClasses } = createClasses(
3
+ "HvCanvasFloatingPanel",
4
+ {
5
+ root: {
6
+ position: "absolute",
7
+ display: "flex",
8
+ flexDirection: "column",
9
+ right: 0,
10
+ bottom: 0,
11
+ width: "100%",
12
+ maxHeight: "500px",
13
+ visibility: "visible",
14
+ transition: "visibility 0.3s ease, max-height 0.3s ease, width 0.3s ease"
15
+ },
16
+ closed: {
17
+ maxHeight: 0,
18
+ visibility: "hidden"
19
+ },
20
+ minimized: {
21
+ "& $content": {
22
+ display: "none"
23
+ },
24
+ "& $tab": {
25
+ backgroundColor: theme.colors.atmo1,
26
+ ...theme.typography.label
27
+ }
28
+ },
29
+ multipleTabs: {
30
+ "& $tab": { maxWidth: "288px" },
31
+ "& $rightActions": {
32
+ right: `calc(100% - var(--right) + ${theme.space.xs})`
33
+ }
34
+ },
35
+ overflowing: {
36
+ "& $tabTitle": {
37
+ paddingLeft: theme.space.sm,
38
+ paddingRight: theme.space.sm
39
+ }
40
+ },
41
+ tab: {
42
+ display: "flex",
43
+ alignItems: "center",
44
+ justifyContent: "flex-start",
45
+ width: "100%"
46
+ },
47
+ tabTitle: {
48
+ display: "flex",
49
+ width: "100%",
50
+ padding: theme.space.sm,
51
+ paddingLeft: `calc(var(--left-actions-width) + ${theme.space.xs})`,
52
+ paddingRight: `calc(var(--right-actions-width) + ${theme.space.xs})`
53
+ },
54
+ tabsRoot: {
55
+ position: "relative"
56
+ },
57
+ leftActions: {
58
+ position: "absolute",
59
+ left: `calc(var(--left) + ${theme.space.xs})`,
60
+ top: 8
61
+ },
62
+ rightActions: {
63
+ position: "absolute",
64
+ right: theme.space.xs,
65
+ top: 8
66
+ },
67
+ content: { borderTopRightRadius: "var(--right-border-radius)" }
68
+ }
69
+ );
70
+ export {
71
+ staticClasses,
72
+ useClasses
73
+ };
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,112 @@
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
+ };
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,61 @@
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
+ };
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,21 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { Tab } from "@mui/base/Tab";
4
+ import { useDefaultProps } from "@hitachivantara/uikit-react-core";
5
+ import { useClasses } from "./Tab.styles.js";
6
+ import { staticClasses } from "./Tab.styles.js";
7
+ const HvCanvasTab = forwardRef(
8
+ (props, ref) => {
9
+ const {
10
+ classes: classesProp,
11
+ className,
12
+ ...others
13
+ } = useDefaultProps("HvCanvasTab", props);
14
+ const { classes, cx } = useClasses(classesProp);
15
+ return /* @__PURE__ */ jsx(Tab, { ref, className: cx(classes.root, className), ...others });
16
+ }
17
+ );
18
+ export {
19
+ HvCanvasTab,
20
+ staticClasses as canvasTabClasses
21
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.js","sources":["../../../../src/Canvas/Tab/Tab.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { Tab, TabProps } from \"@mui/base/Tab\";\nimport {\n ExtractNames,\n useDefaultProps,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { staticClasses, useClasses } from \"./Tab.styles\";\n\nexport { staticClasses as canvasTabClasses };\n\nexport type HvCanvasTabClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvCanvasTabProps extends TabProps {\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasTabClasses;\n}\n\n/**\n * The tab component to use inside `HvCanvasTabs`.\n */\nexport const HvCanvasTab = forwardRef<HTMLButtonElement, HvCanvasTabProps>(\n (props, ref) => {\n const {\n classes: classesProp,\n className,\n ...others\n } = useDefaultProps(\"HvCanvasTab\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n return (\n <Tab ref={ref} className={cx(classes.root, className)} {...others} />\n );\n },\n);\n"],"names":[],"mappings":";;;;;;AAqBO,MAAM,cAAc;AAAA,EACzB,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ,SAAS;AAAA,MACT;AAAA,MACA,GAAG;AAAA,IAAA,IACD,gBAAgB,eAAe,KAAK;AAExC,UAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAG5C,WAAA,oBAAC,KAAI,EAAA,KAAU,WAAW,GAAG,QAAQ,MAAM,SAAS,GAAI,GAAG,OAAQ,CAAA;AAAA,EAEvE;AACF;"}
@@ -0,0 +1,39 @@
1
+ import { tabClasses } from "@mui/base/Tab";
2
+ import { createClasses, theme, outlineStyles } from "@hitachivantara/uikit-react-core";
3
+ const { staticClasses, useClasses } = createClasses("HvCanvasTab", {
4
+ root: {
5
+ height: "100%",
6
+ display: "flex",
7
+ alignItems: "center",
8
+ justifyContent: "center",
9
+ flex: 1,
10
+ borderRadius: "16px 16px 0 0",
11
+ backgroundColor: theme.colors.atmo2,
12
+ color: theme.colors.secondary_60,
13
+ overflow: "hidden",
14
+ width: "100%",
15
+ boxShadow: "0px -2px 8px 0px #4141410F",
16
+ paddingInlineEnd: 0,
17
+ paddingInlineStart: 0,
18
+ "& svg .color0": {
19
+ fill: "currentcolor"
20
+ },
21
+ "&:hover": {
22
+ cursor: "pointer"
23
+ },
24
+ "&:focus": {
25
+ backgroundColor: theme.colors.atmo1
26
+ },
27
+ [`&.${tabClasses.selected}`]: {
28
+ backgroundColor: theme.colors.atmo1,
29
+ ...theme.typography.label
30
+ },
31
+ "&:focus-visible": {
32
+ ...outlineStyles
33
+ }
34
+ }
35
+ });
36
+ export {
37
+ staticClasses,
38
+ useClasses
39
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.styles.js","sources":["../../../../src/Canvas/Tab/Tab.styles.tsx"],"sourcesContent":["import { tabClasses } from \"@mui/base/Tab\";\nimport {\n createClasses,\n outlineStyles,\n theme,\n} from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvCanvasTab\", {\n root: {\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: 1,\n borderRadius: \"16px 16px 0 0\",\n backgroundColor: theme.colors.atmo2,\n color: theme.colors.secondary_60,\n overflow: \"hidden\",\n width: \"100%\",\n boxShadow: \"0px -2px 8px 0px #4141410F\",\n paddingInlineEnd: 0,\n paddingInlineStart: 0,\n \"& svg .color0\": {\n fill: \"currentcolor\",\n },\n \"&:hover\": {\n cursor: \"pointer\",\n },\n \"&:focus\": {\n backgroundColor: theme.colors.atmo1,\n },\n [`&.${tabClasses.selected}`]: {\n backgroundColor: theme.colors.atmo1,\n ...theme.typography.label,\n },\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n});\n"],"names":[],"mappings":";;AAOO,MAAM,EAAE,eAAe,eAAe,cAAc,eAAe;AAAA,EACxE,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,iBAAiB,MAAM,OAAO;AAAA,IAC9B,OAAO,MAAM,OAAO;AAAA,IACpB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB,MAAM,OAAO;AAAA,IAChC;AAAA,IACA,CAAC,KAAK,WAAW,QAAQ,EAAE,GAAG;AAAA,MAC5B,iBAAiB,MAAM,OAAO;AAAA,MAC9B,GAAG,MAAM,WAAW;AAAA,IACtB;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG;AAAA,IACL;AAAA,EACF;AACF,CAAC;"}
@@ -0,0 +1,33 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { Tabs } from "@mui/base/Tabs";
4
+ import { TabsList } from "@mui/base/TabsList";
5
+ import { useDefaultProps } from "@hitachivantara/uikit-react-core";
6
+ import { useClasses } from "./Tabs.styles.js";
7
+ import { staticClasses } from "./Tabs.styles.js";
8
+ const HvCanvasTabs = forwardRef(
9
+ (props, ref) => {
10
+ const {
11
+ selectionFollowsFocus = true,
12
+ children,
13
+ className,
14
+ classes: classesProp,
15
+ ...others
16
+ } = useDefaultProps("HvCanvasTabs", props);
17
+ const { classes, cx } = useClasses(classesProp);
18
+ return /* @__PURE__ */ jsx(
19
+ Tabs,
20
+ {
21
+ ref,
22
+ className: cx(classes.root, className),
23
+ selectionFollowsFocus,
24
+ ...others,
25
+ children: /* @__PURE__ */ jsx(TabsList, { className: classes.list, children })
26
+ }
27
+ );
28
+ }
29
+ );
30
+ export {
31
+ HvCanvasTabs,
32
+ staticClasses as canvasTabsClasses
33
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sources":["../../../../src/Canvas/Tabs/Tabs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { Tabs, TabsProps } from \"@mui/base/Tabs\";\nimport { TabsList } from \"@mui/base/TabsList\";\nimport {\n ExtractNames,\n useDefaultProps,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { staticClasses, useClasses } from \"./Tabs.styles\";\n\nexport { staticClasses as canvasTabsClasses };\n\nexport type HvCanvasTabsClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvCanvasTabsProps extends TabsProps {\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasTabsClasses;\n}\n\n/**\n * A tabs component to use in a canvas context.\n */\nexport const HvCanvasTabs = forwardRef<HTMLDivElement, HvCanvasTabsProps>(\n (props, ref) => {\n const {\n selectionFollowsFocus = true,\n children,\n className,\n classes: classesProp,\n ...others\n } = useDefaultProps(\"HvCanvasTabs\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n return (\n <Tabs\n ref={ref}\n className={cx(classes.root, className)}\n selectionFollowsFocus={selectionFollowsFocus}\n {...others}\n >\n <TabsList className={classes.list}>{children}</TabsList>\n </Tabs>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;AAsBO,MAAM,eAAe;AAAA,EAC1B,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ,wBAAwB;AAAA,MACxB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,GAAG;AAAA,IAAA,IACD,gBAAgB,gBAAgB,KAAK;AAEzC,UAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAG5C,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,QAAQ,MAAM,SAAS;AAAA,QACrC;AAAA,QACC,GAAG;AAAA,QAEJ,UAAC,oBAAA,UAAA,EAAS,WAAW,QAAQ,MAAO,UAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAGnD;AACF;"}
@@ -0,0 +1,13 @@
1
+ import { createClasses } from "@hitachivantara/uikit-react-core";
2
+ const { staticClasses, useClasses } = createClasses("HvCanvasTabs", {
3
+ root: {},
4
+ list: {
5
+ display: "flex",
6
+ width: "100%",
7
+ height: 48
8
+ }
9
+ });
10
+ export {
11
+ staticClasses,
12
+ useClasses
13
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.styles.js","sources":["../../../../src/Canvas/Tabs/Tabs.styles.tsx"],"sourcesContent":["import { createClasses } from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvCanvasTabs\", {\n root: {},\n list: {\n display: \"flex\",\n width: \"100%\",\n height: 48,\n },\n});\n"],"names":[],"mappings":";AAEO,MAAM,EAAE,eAAe,eAAe,cAAc,gBAAgB;AAAA,EACzE,MAAM,CAAC;AAAA,EACP,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF,CAAC;"}
@@ -0,0 +1,43 @@
1
+ import { jsxs, jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useDefaultProps, useLabels, HvIconButton, HvTypography } from "@hitachivantara/uikit-react-core";
4
+ import { Previous } from "@hitachivantara/uikit-react-icons";
5
+ import { useClasses } from "./Toolbar.styles.js";
6
+ import { staticClasses } from "./Toolbar.styles.js";
7
+ const DEFAULT_LABELS = {
8
+ back: "Back"
9
+ };
10
+ const HvCanvasToolbar = forwardRef(
11
+ (props, ref) => {
12
+ const {
13
+ title: titleProp,
14
+ backButton,
15
+ labels: labelsProp,
16
+ className,
17
+ children,
18
+ backButtonProps,
19
+ classes: classesProp,
20
+ ...others
21
+ } = useDefaultProps("HvCanvasToolbar", props);
22
+ const { classes, cx } = useClasses(classesProp);
23
+ const labels = useLabels(DEFAULT_LABELS, labelsProp);
24
+ const title = typeof titleProp === "string" ? /* @__PURE__ */ jsx(HvTypography, { variant: "title4", children: titleProp }) : titleProp;
25
+ return /* @__PURE__ */ jsxs("div", { ref, className: cx(classes.root, className), ...others, children: [
26
+ /* @__PURE__ */ jsx("div", { className: classes.back, children: backButton ?? /* @__PURE__ */ jsx(
27
+ HvIconButton,
28
+ {
29
+ title: labels.back,
30
+ variant: "primaryGhost",
31
+ ...backButtonProps,
32
+ children: /* @__PURE__ */ jsx(Previous, {})
33
+ }
34
+ ) }),
35
+ /* @__PURE__ */ jsx("div", { className: classes.title, children: title }),
36
+ children && /* @__PURE__ */ jsx("div", { className: classes.actions, children })
37
+ ] });
38
+ }
39
+ );
40
+ export {
41
+ HvCanvasToolbar,
42
+ staticClasses as canvasToolbarClasses
43
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.js","sources":["../../../../src/Canvas/Toolbar/Toolbar.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n ExtractNames,\n HvBaseProps,\n HvIconButton,\n HvIconButtonProps,\n HvTypography,\n useDefaultProps,\n useLabels,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Previous } from \"@hitachivantara/uikit-react-icons\";\n\nimport { staticClasses, useClasses } from \"./Toolbar.styles\";\n\nexport { staticClasses as canvasToolbarClasses };\n\nexport type HvCanvasToolbarClasses = ExtractNames<typeof useClasses>;\n\nconst DEFAULT_LABELS = {\n back: \"Back\",\n};\n\nexport interface HvCanvasToolbarProps\n extends HvBaseProps<HTMLDivElement, \"title\"> {\n /** Text to display in the component. */\n title: React.ReactNode;\n /** Fully customized button or false for when the back button should not be rendered. */\n backButton?: React.ReactNode;\n /** An object containing all the labels. */\n labels?: Partial<typeof DEFAULT_LABELS>;\n /* The content that will be rendered within the toolbar. */\n children?: React.ReactNode;\n /** Props for the default back button. */\n backButtonProps?: Partial<HvIconButtonProps>;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvCanvasToolbarClasses;\n}\n\n/**\n * A toolbar component to use in a canvas context.\n */\nexport const HvCanvasToolbar = forwardRef<HTMLDivElement, HvCanvasToolbarProps>(\n (props, ref) => {\n const {\n title: titleProp,\n backButton,\n labels: labelsProp,\n className,\n children,\n backButtonProps,\n classes: classesProp,\n ...others\n } = useDefaultProps(\"HvCanvasToolbar\", props);\n\n const { classes, cx } = useClasses(classesProp);\n const labels = useLabels(DEFAULT_LABELS, labelsProp);\n\n const title =\n typeof titleProp === \"string\" ? (\n <HvTypography variant=\"title4\">{titleProp}</HvTypography>\n ) : (\n titleProp\n );\n\n return (\n <div ref={ref} className={cx(classes.root, className)} {...others}>\n <div className={classes.back}>\n {backButton ?? (\n <HvIconButton\n title={labels.back}\n variant=\"primaryGhost\"\n {...backButtonProps}\n >\n <Previous />\n </HvIconButton>\n )}\n </div>\n <div className={classes.title}>{title}</div>\n {children && <div className={classes.actions}>{children}</div>}\n </div>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;AAkBA,MAAM,iBAAiB;AAAA,EACrB,MAAM;AACR;AAqBO,MAAM,kBAAkB;AAAA,EAC7B,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,GAAG;AAAA,IAAA,IACD,gBAAgB,mBAAmB,KAAK;AAE5C,UAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AACxC,UAAA,SAAS,UAAU,gBAAgB,UAAU;AAE7C,UAAA,QACJ,OAAO,cAAc,+BAClB,cAAa,EAAA,SAAQ,UAAU,UAAA,UAAU,CAAA,IAE1C;AAIF,WAAA,qBAAC,OAAI,EAAA,KAAU,WAAW,GAAG,QAAQ,MAAM,SAAS,GAAI,GAAG,QACzD,UAAA;AAAA,MAAA,oBAAC,OAAI,EAAA,WAAW,QAAQ,MACrB,UACC,cAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,OAAO;AAAA,UACd,SAAQ;AAAA,UACP,GAAG;AAAA,UAEJ,8BAAC,UAAS,EAAA;AAAA,QAAA;AAAA,MAAA,GAGhB;AAAA,MACC,oBAAA,OAAA,EAAI,WAAW,QAAQ,OAAQ,UAAM,OAAA;AAAA,MACrC,YAAa,oBAAA,OAAA,EAAI,WAAW,QAAQ,SAAU,UAAS;AAAA,IAC1D,EAAA,CAAA;AAAA,EAEJ;AACF;"}