@camunda/camunda-composite-components 0.0.35 → 0.0.36

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.
@@ -1,69 +1,73 @@
1
1
  import React, { useState } from "react";
2
2
  import { Close } from "@carbon/react/icons";
3
3
  import { useOnClickOutside } from "./helpers";
4
- import { HeaderGlobalAction, HeaderMenuItem, HeaderSideNavItems, SideNav, SideNavItems, SideNavLink, SideNavMenu, SideNavMenuItem, } from "@carbon/react";
4
+ import { HeaderGlobalAction, HeaderMenuItem, HeaderSideNavItems, SideNav as CarbonSideNav, SideNavItems, SideNavLink, SideNavMenu, SideNavMenuItem, } from "@carbon/react";
5
5
  import { C3AppMenuIcon } from "../../icons/c3-icons";
6
- const C3NavigationExternalLink = ({ label }) => React.createElement(React.Fragment, null, label);
6
+ import styled from "styled-components";
7
+ const NavWrapper = styled.div `
8
+ .cds--side-nav__overlay {
9
+ display: none;
10
+ }
11
+ `;
12
+ const SideNav = styled(CarbonSideNav) `
13
+ visibility: ${({ expanded }) => (expanded ? "visible" : "hidden")};
14
+ display: grid;
15
+ grid-auto-flow: row;
16
+ grid-auto-rows: max-content 1fr;
17
+ border-right: ${({ expanded }) => expanded ? "1px solid var(--cds-border-subtle)" : undefined};
18
+ overflow-y: auto;
19
+ `;
7
20
  export const C3NavigationAppBar = ({ appBar, forwardRef, navbar, }) => {
8
21
  const [appBarOpen, setAppBarOpen] = useState(appBar.isOpen);
9
22
  const [panelRef, iconRef] = useOnClickOutside(() => setAppBarOpen(false));
10
23
  return (React.createElement(React.Fragment, null,
11
- React.createElement(HeaderGlobalAction, { ref: iconRef, "aria-label": "App Switcher", isActive: appBarOpen, onClick: () => {
24
+ React.createElement(HeaderGlobalAction, { ref: iconRef, "aria-label": "Camunda apps", isActive: appBarOpen, onClick: () => {
12
25
  setAppBarOpen(!appBarOpen);
13
26
  }, tooltipAlignment: "start" }, appBarOpen ? React.createElement(Close, { size: 20 }) : React.createElement(C3AppMenuIcon, { size: 20 })),
14
- React.createElement(SideNav, { ref: panelRef, "aria-label": appBar.ariaLabel || "Side Navigation", expanded: appBarOpen, isPersistent: false, style: {
15
- display: "grid",
16
- gridAutoFlow: "row",
17
- gridAutoRows: "max-content 1fr",
18
- borderRight: appBarOpen
19
- ? "1px solid var(--cds-border-subtle)"
20
- : undefined,
21
- overflowY: "auto",
22
- } },
23
- React.createElement(SideNavItems, null,
24
- navbar.elements.length > 0 && (React.createElement(HeaderSideNavItems, { hasDivider: true }, navbar.elements.map((element) => (React.createElement(HeaderMenuItem, { key: element.key, element: forwardRef, isCurrentPage: element.isCurrentPage, ...element.routeProps, onClick: () => {
25
- if (appBar.closeOnClick !== false) {
26
- setAppBarOpen(false);
27
- }
28
- } }, element.label))))),
29
- appBar.elements &&
30
- appBar.elements.map((element) => {
31
- if (element.subElements && element.subElements.length > 0) {
32
- return (React.createElement(SideNavMenu, { large: true, title: element.label, key: element.key }, element.subElements.map((subElement) => (React.createElement(SideNavMenuItem, { key: subElement.key, href: subElement.href, target: subElement.href ? subElement.target : undefined, onClick: () => {
33
- if (subElement.onClick) {
34
- subElement.onClick();
35
- }
36
- if (appBar.closeOnClick !== false) {
37
- setAppBarOpen(false);
38
- }
39
- if (appBar.elementClicked) {
40
- appBar.elementClicked(subElement.key);
41
- }
42
- } },
43
- React.createElement(C3NavigationExternalLink, { label: subElement.label }))))));
44
- }
45
- else {
46
- return element.routeProps ? (React.createElement(SideNavLink, { element: forwardRef, key: element.key, large: true, isActive: element.active, ...element.routeProps, onClick: () => {
47
- if (element.onClick) {
48
- element.onClick();
49
- }
50
- if (appBar.closeOnClick !== false) {
51
- setAppBarOpen(false);
52
- }
53
- if (appBar.elementClicked) {
54
- appBar.elementClicked(element.key);
55
- }
56
- } }, element.label)) : (React.createElement(SideNavLink, { key: element.key, large: true, onClick: () => {
57
- if (element.onClick) {
58
- element.onClick();
59
- }
60
- if (appBar.closeOnClick !== false) {
61
- setAppBarOpen(false);
62
- }
63
- if (appBar.elementClicked) {
64
- appBar.elementClicked(element.key);
65
- }
66
- }, href: element.href, target: element.href ? element.target : undefined }, element.label));
67
- }
68
- })))));
27
+ React.createElement(NavWrapper, null,
28
+ React.createElement(SideNav, { ref: panelRef, "aria-label": appBar.ariaLabel || "Side Navigation", expanded: appBarOpen, isPersistent: false },
29
+ React.createElement(SideNavItems, null,
30
+ navbar.elements.length > 0 && (React.createElement(HeaderSideNavItems, { hasDivider: true }, navbar.elements.map((element) => (React.createElement(HeaderMenuItem, { key: element.key, element: forwardRef, isCurrentPage: element.isCurrentPage, ...element.routeProps, onClick: () => {
31
+ if (element.routeProps.onClick) {
32
+ element.routeProps.onClick();
33
+ }
34
+ if (appBar.closeOnClick !== false) {
35
+ setAppBarOpen(false);
36
+ }
37
+ } }, element.label))))),
38
+ appBar.elements &&
39
+ appBar.elements.map((element) => {
40
+ if (element.subElements && element.subElements.length > 0) {
41
+ return (React.createElement(SideNavMenu, { large: true, title: element.label, key: element.key }, element.subElements.map((subElement) => (React.createElement(SideNavMenuItem, { element: forwardRef, key: subElement.key, href: subElement.href, target: subElement.href ? subElement.target : undefined, ...subElement.routeProps, onClick: () => {
42
+ if (subElement.onClick) {
43
+ subElement.onClick();
44
+ }
45
+ if (subElement.routeProps.onClick) {
46
+ subElement.routeProps.onClick();
47
+ }
48
+ if (appBar.closeOnClick !== false) {
49
+ setAppBarOpen(false);
50
+ }
51
+ if (appBar.elementClicked) {
52
+ appBar.elementClicked(subElement.key);
53
+ }
54
+ } }, subElement.label)))));
55
+ }
56
+ else {
57
+ return (React.createElement(SideNavLink, { element: forwardRef, key: element.key, large: true, isActive: element.active, ...element.routeProps, onClick: () => {
58
+ if (element.onClick) {
59
+ element.onClick();
60
+ }
61
+ if (element.routeProps.onClick) {
62
+ element.routeProps.onClick();
63
+ }
64
+ if (appBar.closeOnClick !== false) {
65
+ setAppBarOpen(false);
66
+ }
67
+ if (appBar.elementClicked) {
68
+ appBar.elementClicked(element.key);
69
+ }
70
+ }, href: element.href, target: element.href ? element.target : undefined }, element.label));
71
+ }
72
+ }))))));
69
73
  };
@@ -1,7 +1,16 @@
1
- import { Button, HeaderGlobalAction, HeaderPanel, Stack, SwitcherDivider, } from "@carbon/react";
1
+ import { Button, HeaderGlobalAction, HeaderPanel as CarbonHeaderPanel, Stack, SwitcherDivider, } from "@carbon/react";
2
2
  import React from "react";
3
3
  import { useOnClickOutside } from "../helpers";
4
4
  import C3NavigationSidebarElement from "./c3-navigation-sidebar-element";
5
+ import styled from "styled-components";
6
+ const HeaderPanel = styled(CarbonHeaderPanel) `
7
+ visibility: ${({ expanded }) => (expanded ? "visible" : "hidden")};
8
+ display: grid;
9
+ grid-auto-flow: row;
10
+ grid-auto-rows: max-content 1fr;
11
+ overflow-y: auto;
12
+ overflow-x: hidden;
13
+ `;
5
14
  const C3NavigationSideBar = (props) => {
6
15
  const { icon, sideBar, children, bottomChildren } = props;
7
16
  const { isOpen, setIsOpen } = sideBar;
@@ -9,13 +18,7 @@ const C3NavigationSideBar = (props) => {
9
18
  const [panelRef, iconRef] = useOnClickOutside(() => isOpen && setIsOpen(false));
10
19
  return (React.createElement(React.Fragment, null,
11
20
  React.createElement(HeaderGlobalAction, { ref: iconRef, "aria-label": `Open ${sideBar.ariaLabel}`, onClick: () => setIsOpen(!isOpen), isActive: isOpen, tooltipAlignment: sideBar.type === "user" ? "end" : "center" }, icon),
12
- React.createElement(HeaderPanel, { ref: panelRef, "aria-label": sideBar.ariaLabel, expanded: isOpen, style: {
13
- display: "grid",
14
- gridAutoFlow: "row",
15
- gridAutoRows: "max-content 1fr",
16
- overflowY: "auto",
17
- overflowX: "hidden",
18
- } },
21
+ React.createElement(HeaderPanel, { ref: panelRef, "aria-label": sideBar.ariaLabel, expanded: isOpen },
19
22
  React.createElement(Stack, null,
20
23
  children,
21
24
  sideBar.elements &&
@@ -5,7 +5,7 @@ import C3NavigationSideBar from "./c3-navigation-sidebar";
5
5
  import { SwitcherDivider } from "./components";
6
6
  const C3OrgSidebar = ({ sideBar }) => {
7
7
  const { customElements, isOpen, ...sideBarProps } = sideBar;
8
- const activeOrganization = sideBar.customElements?.activeOrganization;
8
+ const activeOrganization = customElements?.activeOrganization;
9
9
  const [isSidebarOpen, setIsSidebarOpen] = useState(isOpen);
10
10
  const itemTabIndex = isSidebarOpen ? undefined : -1;
11
11
  return (React.createElement(C3NavigationSideBar, { sideBar: {
@@ -4,10 +4,10 @@ import { FormLabel, RadioButton, RadioButtonGroup, Stack, SwitcherDivider, Toggl
4
4
  import { UserAvatar } from "@carbon/react/icons";
5
5
  const C3UserSidebar = ({ sideBar }) => {
6
6
  const { customElements, isOpen, ...sideBarProps } = sideBar;
7
- const profile = sideBar.customElements?.profile;
8
- const themeSelector = sideBar.customElements?.themeSelector;
9
- const stageToggle = sideBar.customElements?.stageToggle;
10
- const customSection = sideBar.customElements?.customSection;
7
+ const profile = customElements?.profile;
8
+ const themeSelector = customElements?.themeSelector;
9
+ const stageToggle = customElements?.stageToggle;
10
+ const customSection = customElements?.customSection;
11
11
  const [isSidebarOpen, setIsSidebarOpen] = useState(isOpen);
12
12
  const itemTabIndex = isSidebarOpen ? undefined : -1;
13
13
  return (React.createElement(C3NavigationSideBar, { sideBar: {
@@ -1,4 +1,4 @@
1
- import { Header, HeaderContainer, HeaderGlobalBar, HeaderMenuItem, HeaderName, HeaderNavigation, SkipToContent, Tag, Toggletip, ToggletipButton, ToggletipContent, } from "@carbon/react";
1
+ import { Header, HeaderContainer, HeaderGlobalBar, HeaderMenuItem, HeaderName as CarbonHeaderName, HeaderNavigation, SkipToContent, Tag, Toggletip, ToggletipButton, ToggletipContent, } from "@carbon/react";
2
2
  import React from "react";
3
3
  import C3InfoSidebar from "./c3-navigation-sidebar/c3-info-sidebar";
4
4
  import { C3NotificationSidebar } from "./c3-navigation-sidebar/c3-notification-sidebar";
@@ -7,11 +7,17 @@ import C3UserSidebar from "./c3-navigation-sidebar/c3-user-sidebar";
7
7
  import { useMediaQuery } from "./helpers";
8
8
  import { C3NavigationAppBar } from "./c3-navigation-appbar";
9
9
  import styled from "styled-components";
10
+ import { CamundaLogo } from "../../icons/c3-icons";
10
11
  /**
11
12
  * UI SHELL
12
13
  * Docs: https://react.carbondesignsystem.com/?path=/story/components-ui-shell--fixed-side-nav
13
14
  */
14
15
  const BREAKPOINT_LG_WIDTH = "66rem"; // This is Carbon's breakpoint (lg) width https://github.com/carbon-design-system/carbon/blob/main/packages/layout/src/index.js#L56
16
+ const HeaderName = styled(CarbonHeaderName) `
17
+ display: grid;
18
+ grid-auto-flow: column;
19
+ gap: 0.5rem;
20
+ `;
15
21
  const StyledToggletipContent = styled(ToggletipContent) `
16
22
  .cds--link:visited {
17
23
  color: var(--cds-link-text-color);
@@ -29,7 +35,8 @@ export const C3Navigation = ({ app, appBar, forwardRef, navbar, orgSideBar, info
29
35
  return (React.createElement(Header, { "aria-label": app.ariaLabel },
30
36
  React.createElement(SkipToContent, null),
31
37
  displayAppBar && (React.createElement(C3NavigationAppBar, { app: app, appBar: appBar, forwardRef: forwardRef, navbar: navbar })),
32
- React.createElement(HeaderName, { element: forwardRef, prefix: app.prefix, ...app.routeProps },
38
+ React.createElement(HeaderName, { element: forwardRef, prefix: "", ...app.routeProps },
39
+ React.createElement(CamundaLogo, { "aria-label": "Camunda" }),
33
40
  React.createElement("span", null, app.name)),
34
41
  React.createElement(HeaderNavigation, { "aria-label": app.ariaLabel }, navbar.elements.map((element) => (React.createElement(HeaderMenuItem, { key: element.key, element: forwardRef, isCurrentPage: element.isCurrentPage, ...element.routeProps },
35
42
  React.createElement("span", null, element.label))))),
@@ -3,7 +3,7 @@ import { Tag } from "@carbon/react";
3
3
  import { Endpoints, Stage } from "../../api/endpoints.const";
4
4
  import { C3NavigationAppBarProps, C3NavigationInfoSideBarProps, C3NavigationNotificationsSideBarProps, C3NavigationOrgSideBarProps, C3NavigationUserSideBarProps } from "./c3-navigation-sidebar/c3-navigation-sidebar.types";
5
5
  export interface C3NavigationAppProps {
6
- prefix: string;
6
+ prefix?: string;
7
7
  name: string;
8
8
  ariaLabel: string;
9
9
  routeProps: any;
@@ -3,10 +3,11 @@ import { Link } from "@carbon/react";
3
3
  import { ArrowRight } from "@carbon/react/icons";
4
4
  export function createAppProps() {
5
5
  return {
6
- prefix: "Camunda",
7
6
  name: "Console",
8
7
  ariaLabel: "Camunda Console",
9
- routeProps: {},
8
+ routeProps: {
9
+ href: "https://www.camunda.com",
10
+ },
10
11
  };
11
12
  }
12
13
  export function createAppBarProps(options = {}) {
@@ -22,8 +23,14 @@ export function createAppBarProps(options = {}) {
22
23
  key: "modeler",
23
24
  label: "Modeler",
24
25
  active: false,
25
- href: "https://camunda.com/",
26
+ routeProps: { onClick: () => console.log("Redirecting to Modeler...") },
27
+ },
28
+ {
29
+ key: "operate",
30
+ label: "Operate",
31
+ active: false,
26
32
  target: "_blank",
33
+ href: "https://camunda.com/",
27
34
  },
28
35
  {
29
36
  key: "tasklist",
@@ -39,8 +46,14 @@ export function createAppBarProps(options = {}) {
39
46
  {
40
47
  key: "cluster-b",
41
48
  label: "Cluster B",
42
- href: "https://camunda.com/",
43
- target: "_blank",
49
+ onClick: () => console.log("Redirecting to Tasklist..."),
50
+ },
51
+ {
52
+ key: "cluster-c",
53
+ label: "Cluster C",
54
+ routeProps: {
55
+ onClick: () => console.log("Redirecting to Tasklist..."),
56
+ },
44
57
  },
45
58
  ],
46
59
  },
@@ -60,7 +73,9 @@ export function createNavBarBarProps(options = {}) {
60
73
  key: "clusters",
61
74
  label: "Clusters",
62
75
  isCurrentPage: false,
63
- routeProps: {},
76
+ routeProps: {
77
+ onClick: () => console.log("Redirecting to clusters..."),
78
+ },
64
79
  },
65
80
  ],
66
81
  orgName: "Camunda",
@@ -3,3 +3,4 @@ import { C3IconProps } from "./c3-icons.types";
3
3
  export declare const C3AppMenuIcon: ({ size }: C3IconProps) => JSX.Element;
4
4
  export declare const C3NotificationsUnreadIcon: ({ size }: C3IconProps) => JSX.Element;
5
5
  export declare const C3BellIcon: ({ size }: C3IconProps) => JSX.Element;
6
+ export declare const CamundaLogo: () => JSX.Element;
@@ -7,3 +7,8 @@ export const C3NotificationsUnreadIcon = ({ size }) => (React.createElement("svg
7
7
  React.createElement("path", { d: "M15 10.25a5 5 0 1 0 0-10 5 5 0 0 0 0 10Z", style: { fill: "var(--cds-link-primary)" } })));
8
8
  export const C3BellIcon = ({ size }) => (React.createElement("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, fill: "transparent", xmlns: "http://www.w3.org/2000/svg" },
9
9
  React.createElement("path", { d: "M50.2373 33.7627L45.5 29.0253V22.75C45.4944 18.4134 43.881 14.2329 40.9718 11.0169C38.0626 7.80093 34.0643 5.77786 29.75 5.3389V1.75H26.25V5.3389C21.9357 5.77786 17.9374 7.80093 15.0282 11.0169C12.119 14.2329 10.5056 18.4134 10.5 22.75V29.0253L5.76275 33.7627C5.60018 33.9252 5.47122 34.118 5.38324 34.3303C5.29526 34.5426 5.24998 34.7702 5.25 35V40.25C5.25 40.7141 5.43437 41.1592 5.76256 41.4874C6.09075 41.8156 6.53587 42 7 42H19.25V43.75C19.25 46.0706 20.1719 48.2962 21.8128 49.9372C23.4538 51.5781 25.6794 52.5 28 52.5C30.3206 52.5 32.5462 51.5781 34.1872 49.9372C35.8281 48.2962 36.75 46.0706 36.75 43.75V42H49C49.4641 42 49.9092 41.8156 50.2374 41.4874C50.5656 41.1592 50.75 40.7141 50.75 40.25V35C50.75 34.7702 50.7047 34.5426 50.6168 34.3303C50.5288 34.118 50.3998 33.9252 50.2373 33.7627ZM33.25 43.75C33.25 45.1424 32.6969 46.4777 31.7123 47.4623C30.7277 48.4469 29.3924 49 28 49C26.6076 49 25.2723 48.4469 24.2877 47.4623C23.3031 46.4777 22.75 45.1424 22.75 43.75V42H33.25V43.75Z", fill: "#FF8201" })));
10
+ export const CamundaLogo = () => (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" },
11
+ React.createElement("title", null, "Camunda logo"),
12
+ React.createElement("rect", { width: "24", height: "24", rx: "3", style: { fill: "var(--cds-icon-primary)" } }),
13
+ React.createElement("path", { d: "M11.986 15.585c1.824 0 2.762-1.075 2.776-2.967v-1.564h-1.755v1.687c0 .844-.368 1.143-.966 1.143-.585 0-.966-.3-.966-1.143V6.364c0-.843.367-1.17.966-1.156.585 0 .966.326.966 1.17v1.261h1.755V6.496c0-1.891-.94-2.965-2.762-2.965-1.823 0-2.764 1.074-2.776 2.965v6.136c0 1.864.943 2.953 2.762 2.953Z", style: { fill: "var(--cds-text-inverse)" } }),
14
+ React.createElement("path", { d: "M14.762 17.312H9.224v3.13h5.538v-3.13Z", fill: "#FC5D0D" })));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/camunda-composite-components",
3
- "version": "0.0.35",
3
+ "version": "0.0.36",
4
4
  "scripts": {
5
5
  "clean": "rimraf lib/",
6
6
  "copy-css-files": "copyfiles -u 1 src/components/**/*.css lib/esm",