@camunda/camunda-composite-components 0.4.2-rc.0 → 0.4.2-rc.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/README.md CHANGED
@@ -1,14 +1,26 @@
1
1
  # Camunda Composite Components
2
2
 
3
- Camunda Composite Components (also known as **C3**) is the main software artifact of the [Design System Team](https://confluence.camunda.com/display/HAN/Design+System).
3
+ Camunda Composite Components (also known as **C3**) is the main software
4
+ artifact of the
5
+ [Design System Team](https://confluence.camunda.com/display/HAN/Design+System).
4
6
 
5
- We have a dedicated slack channel for everyone having questions, comments, bug reports or concerns about this repository: [#camunda-composite-components](https://app.slack.com/client/T0PM0P1SA/C049YH1C202/thread/C03NF7FH17G-1671730364.608129). For more general questions towards the Design System team, please use [#ask-cds](https://app.slack.com/client/T0PM0P1SA/C04FUEGLG8N).
7
+ We have a dedicated slack channel for everyone having questions, comments, bug
8
+ reports or concerns about this repository:
9
+ [#camunda-composite-components](https://app.slack.com/client/T0PM0P1SA/C049YH1C202/thread/C03NF7FH17G-1671730364.608129).
10
+ For more general questions towards the Design System team, please use
11
+ [#ask-cds](https://app.slack.com/client/T0PM0P1SA/C04FUEGLG8N).
6
12
 
7
- If you like the idea of having a repository for your own composite components - how about you do your own **Camunda Custom Composite Components**? Just go over [here](https://github.com/camunda-cloud/c4-starter), fork it, lezgo! A list of C4-Adopters can be found <a href="#c4list">here</a>.
13
+ If you like the idea of having a repository for your own composite components -
14
+ how about you do your own **Camunda Custom Composite Components**? Just go over
15
+ [here](https://github.com/camunda-cloud/c4-starter), fork it, lezgo! A list of
16
+ C4-Adopters can be found <a href="#c4list">here</a>.
8
17
 
9
18
  ## Storybook
10
19
 
11
- A live view of the `main` branch can be found [here](https://camunda-composite-components.pages.dev/). When opening a PR, a version of storybook with the changes is deployed automatically and can be accessed by clicking on the link in the PR.
20
+ A live view of the `main` branch can be found
21
+ [here](https://camunda-composite-components.pages.dev/). When opening a PR, a
22
+ version of storybook with the changes is deployed automatically and can be
23
+ accessed by clicking on the link in the PR.
12
24
 
13
25
  ## Dev
14
26
 
@@ -25,9 +37,13 @@ yarn build
25
37
 
26
38
  ## Release
27
39
 
28
- Simply run our [release workflow](https://github.com/camunda-cloud/camunda-composite-components/actions/workflows/release.yml) in the GitHub Actions tab. This will create a new release, publish the package to npm and update the changelog automatically.
40
+ Simply run our
41
+ [release workflow](https://github.com/camunda-cloud/camunda-composite-components/actions/workflows/release.yml)
42
+ in the GitHub Actions tab. This will create a new release, publish the package
43
+ to npm and update the changelog automatically.
29
44
 
30
- Pushing to `main` will update the storybook available under [cloudflare page](https://camunda-composite-components.pages.dev/).
45
+ Pushing to `main` will update the storybook available under
46
+ [cloudflare page](https://camunda-composite-components.pages.dev/).
31
47
 
32
48
  ## Usage
33
49
 
@@ -53,18 +69,24 @@ return (
53
69
 
54
70
  ## <a name="c4list"></a> (incomplete) List of adopters of C3+C4
55
71
 
56
- - [Console team](https://confluence.camunda.com/display/HAN/Console+Team) started this, their C4 repo can be found [here](https://github.com/camunda-cloud/camunda-cloud-management-apps/tree/main/packages/c4)
57
- - [Identity team](https://github.com/camunda/team-identity): [c4-identity](https://github.com/camunda-cloud/c4-identity)
72
+ - [Console team](https://confluence.camunda.com/display/HAN/Console+Team)
73
+ started this, their C4 repo can be found
74
+ [here](https://github.com/camunda-cloud/camunda-cloud-management-apps/tree/main/packages/c4)
75
+ - [Identity team](https://github.com/camunda/team-identity):
76
+ [c4-identity](https://github.com/camunda-cloud/c4-identity)
58
77
 
59
78
  ## Testing
60
79
 
61
80
  ### Visual regression tests (VRT)
62
81
 
63
- We use [Playwright](https://playwright.dev/docs/intro) screenshot tests to be aware of any visual changes introduced by dependency updates or changes in the component code.
82
+ We use [Playwright](https://playwright.dev/docs/intro) screenshot tests to be
83
+ aware of any visual changes introduced by dependency updates or changes in the
84
+ component code.
64
85
 
65
86
  #### Running VRT locally
66
87
 
67
- We run VRT inside a docker container to avoid different results caused by different platforms. Simply run:
88
+ We run VRT inside a docker container to avoid different results caused by
89
+ different platforms. Simply run:
68
90
 
69
91
  ```shell
70
92
  yarn start:docker-storybook
@@ -83,30 +105,39 @@ The commands above will:
83
105
  3. Serve storybook within the docker container.
84
106
  4. Run the visual regression tests within the docker container.
85
107
 
86
- When developing, it might not always be helpful to run all of these steps at once. You can find more granular scripts in the [package.json](package.json).
108
+ When developing, it might not always be helpful to run all of these steps at
109
+ once. You can find more granular scripts in the [package.json](package.json).
87
110
 
88
111
  #### Running VRT in the CI
89
112
 
90
- There is a `Visual regression tests` workflow that is triggered automatically on push. You can also trigger it manually in the `Actions` tab.
113
+ There is a `Visual regression tests` workflow that is triggered automatically on
114
+ push. You can also trigger it manually in the `Actions` tab.
91
115
 
92
- If the workflow fails, you can find the test report by navigating to the workflow run summary, then scrolling down to the `Artifacts` section.
93
- Click on the artifact called `Playwright report` to download it, go to your downloads folder, then open the `index.html` file of the test report in your browser to view the report.
116
+ If the workflow fails, you can find the test report by navigating to the
117
+ workflow run summary, then scrolling down to the `Artifacts` section. Click on
118
+ the artifact called `Playwright report` to download it, go to your downloads
119
+ folder, then open the `index.html` file of the test report in your browser to
120
+ view the report.
94
121
 
95
122
  #### How to deal with failing tests
96
123
 
97
124
  When a VRT fails, this can have two reasons:
98
125
 
99
- 1. A change was introduced unknowingly. In this case, have a look at the test report and check if the change was intended. If it is, proceed with 2.
100
- 2. You made a change to the UI on purpose. In this case you need to update the screenshot as follows.
126
+ 1. A change was introduced unknowingly. In this case, have a look at the test
127
+ report and check if the change was intended. If it is, proceed with 2.
128
+ 2. You made a change to the UI on purpose. In this case you need to update the
129
+ screenshot as follows.
101
130
 
102
- Make sure you have the `c3-visual-regression` docker container running, or start it like described [here](#running-vrt-locally).
103
- Then, have a look at the test report:
131
+ Make sure you have the `c3-visual-regression` docker container running, or start
132
+ it like described [here](#running-vrt-locally). Then, have a look at the test
133
+ report:
104
134
 
105
135
  ```shell
106
136
  yarn report:visual-regression
107
137
  ```
108
138
 
109
- Double-check that you don't apply any unwanted changes by looking at the difference that is highlighted in the failed test's report.
139
+ Double-check that you don't apply any unwanted changes by looking at the
140
+ difference that is highlighted in the failed test's report.
110
141
 
111
142
  To update all screenshots, run:
112
143
 
@@ -114,4 +145,5 @@ To update all screenshots, run:
114
145
  yarn update:visual-regression:docker
115
146
  ```
116
147
 
117
- The tests should now pass locally and in the CI. Commit and push the updated screenshot(s).
148
+ The tests should now pass locally and in the CI. Commit and push the updated
149
+ screenshot(s).
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/camunda-cloud/camunda-composite-components.git"
6
6
  },
7
- "version": "0.4.1",
7
+ "version": "0.4.2-rc.1",
8
8
  "scripts": {
9
9
  "clean": "rimraf lib/",
10
10
  "build": "yarn clean && tsc",
@@ -39,16 +39,16 @@
39
39
  "@playwright/test": "1.41.2",
40
40
  "@semantic-release/changelog": "6.0.3",
41
41
  "@semantic-release/git": "10.0.1",
42
- "@storybook/addon-a11y": "7.6.10",
43
- "@storybook/addon-actions": "7.6.10",
44
- "@storybook/addon-docs": "7.6.10",
45
- "@storybook/addon-essentials": "7.6.10",
46
- "@storybook/addon-interactions": "7.6.10",
47
- "@storybook/addon-links": "7.6.10",
48
- "@storybook/blocks": "7.6.10",
42
+ "@storybook/addon-a11y": "7.6.11",
43
+ "@storybook/addon-actions": "7.6.11",
44
+ "@storybook/addon-docs": "7.6.11",
45
+ "@storybook/addon-essentials": "7.6.11",
46
+ "@storybook/addon-interactions": "7.6.11",
47
+ "@storybook/addon-links": "7.6.11",
48
+ "@storybook/blocks": "7.6.11",
49
49
  "@storybook/preset-scss": "1.0.3",
50
- "@storybook/react": "7.6.10",
51
- "@storybook/react-webpack5": "7.6.10",
50
+ "@storybook/react": "7.6.11",
51
+ "@storybook/react-webpack5": "7.6.11",
52
52
  "@storybook/test-runner": "0.16.0",
53
53
  "@storybook/testing-library": "0.2.2",
54
54
  "@types/carbon-components-react": "7.55.10",
@@ -84,7 +84,7 @@
84
84
  "sass-loader": "13.3.3",
85
85
  "semantic-release": "23.0.0",
86
86
  "serve": "14.2.1",
87
- "storybook": "7.6.10",
87
+ "storybook": "7.6.11",
88
88
  "style-loader": "3.3.4",
89
89
  "styled-components": "6.1.8",
90
90
  "typescript": "5.3.3",
@@ -8,9 +8,10 @@ export const teaserApps = ["tasklist", "operate", "optimize"];
8
8
  const base64Src = (src) => `data:image/jpeg;base64,${src}`;
9
9
  export const C3AppTeaser = ({ appName: app, hasTrialExpired, canUpgradePlan, canCreateCluster, redirectToCheckout, redirectToCreateCluster, }) => {
10
10
  const appName = app ? getReadableAppName(app) : "";
11
- const { activeOrganizationId, decodedAudience } = useC3UserConfiguration();
11
+ const { activeOrganizationId, decodedAudience, analyticsTrack } = useC3UserConfiguration();
12
12
  const onClickCta = () => {
13
13
  if (hasTrialExpired) {
14
+ analyticsTrack?.("checkout:open", { appTeaser: appName });
14
15
  if (redirectToCheckout) {
15
16
  redirectToCheckout();
16
17
  }
@@ -19,6 +20,7 @@ export const C3AppTeaser = ({ appName: app, hasTrialExpired, canUpgradePlan, can
19
20
  }
20
21
  }
21
22
  else {
23
+ analyticsTrack?.("clusters:create:open", { appTeaser: appName });
22
24
  if (redirectToCreateCluster) {
23
25
  redirectToCreateCluster();
24
26
  }
@@ -3,7 +3,7 @@ import { Persona } from "./c3-help-center.types";
3
3
  import { Dict } from "mixpanel-browser";
4
4
  import { Theme } from "../c3-user-configuration/c3-profile-provider/c3-profile-provider";
5
5
  export interface C3HelpCenterProps {
6
- origin: "console" | "webmodeler" | "operate" | "tasklist" | "optimize";
6
+ origin?: "console" | "webmodeler" | "operate" | "tasklist" | "optimize";
7
7
  theme?: Theme;
8
8
  flags?: string[];
9
9
  activeTab?: string;
@@ -10,7 +10,7 @@ import { resolveTheme, } from "../c3-user-configuration/c3-profile-provider/carb
10
10
  import { useC3HelpCenter } from "./c3-help-center-provider";
11
11
  export const C3HelpCenter = ({ autoStartSurvey, origin, flags, onRequestClose, mixpanelTrack: customMixpanelTrack, onRequestOpen, theme, onPersonaChange, activeTab, }) => {
12
12
  const { isHelpCenterOpen: isOpen, setIsHelpCenterOpen, setShowHintOnClose, } = useC3HelpCenter();
13
- const { userToken, decodedToken, activeOrganizationId, handleTheme, decodedAudience, analyticsTrack, } = useC3UserConfiguration();
13
+ const { userToken, decodedToken, activeOrganizationId, handleTheme, decodedAudience, analyticsTrack, currentApp, } = useC3UserConfiguration();
14
14
  const { theme: themeConfig, isEnabled, reloadClusters } = useC3Profile();
15
15
  const themeHandlingEnabled = isEnabled && !!handleTheme && !!themeConfig;
16
16
  const themeRef = useRef();
@@ -20,6 +20,9 @@ export const C3HelpCenter = ({ autoStartSurvey, origin, flags, onRequestClose, m
20
20
  const [helpCenterConfig, setHelpCenterConfig] = useState(defaultHelpCenterConfig);
21
21
  const [email, setEmail] = useState("");
22
22
  const [showSurvey, setShowSurvey] = useState(autoStartSurvey);
23
+ if (!origin && !currentApp)
24
+ console.warn("No app provided to the help center. Please provide the `currentApp` prop to the `C3UserConfigurationProvider`.");
25
+ const hostApp = origin || currentApp === "modeler" ? "webmodeler" : currentApp || "console";
23
26
  const mixpanelTrack = (event, data) => {
24
27
  if (customMixpanelTrack) {
25
28
  customMixpanelTrack(event, data);
@@ -195,5 +198,5 @@ export const C3HelpCenter = ({ autoStartSurvey, origin, flags, onRequestClose, m
195
198
  }, 400);
196
199
  };
197
200
  return (React.createElement(Layer, null,
198
- React.createElement(ComposedModal, { open: isOpen, size: "lg", onClose: closeFn, className: "help-center", "aria-label": "HelpCenter" }, showSurvey || !persona?.wasShown ? (React.createElement(C3OnboardingSurvey, { personaCallback: personaCallback, persona: persona, mixpanelTrack: mixpanelTrack, onRequestClose: closeFn, onRequestSkip: onRequestSkipSurvey, theme: resolvedTheme, origin: origin, modal: true })) : (React.createElement(HelpCenter, { configuration: helpCenterConfig, persona: persona, audience: decodedAudience || "", flags: flags, onRequestResumeSurvey: onRequestResumeSurvey, onRequestRetakeSurvey: onRequestRetakeSurvey, onRequestClose: closeFn, mixpanelTrack: mixpanelTrack, email: email, theme: resolvedTheme, origin: origin, initialTab: activeTab })))));
201
+ React.createElement(ComposedModal, { open: isOpen, size: "lg", onClose: closeFn, className: "help-center", "aria-label": "HelpCenter" }, showSurvey || !persona?.wasShown ? (React.createElement(C3OnboardingSurvey, { personaCallback: personaCallback, persona: persona, mixpanelTrack: mixpanelTrack, onRequestClose: closeFn, onRequestSkip: onRequestSkipSurvey, theme: resolvedTheme, origin: hostApp, modal: true })) : (React.createElement(HelpCenter, { configuration: helpCenterConfig, persona: persona, audience: decodedAudience || "", flags: flags, onRequestResumeSurvey: onRequestResumeSurvey, onRequestRetakeSurvey: onRequestRetakeSurvey, onRequestClose: closeFn, mixpanelTrack: mixpanelTrack, email: email, theme: resolvedTheme, origin: hostApp, initialTab: activeTab })))));
199
202
  };
@@ -9,44 +9,45 @@ import { APPS } from "../../../utils/camunda";
9
9
  import { NavWrapper, SideNav } from "./components";
10
10
  export const C3NavigationAppBar = ({ appBar, forwardRef, navbar, }) => {
11
11
  const { currentApp, decodedAudience, analyticsTrack } = useC3UserConfiguration();
12
- const { clusters, activeOrg } = useC3Profile();
12
+ const { clusters, activeOrg, isEnabled } = useC3Profile();
13
13
  const [appBarOpen, setAppBarOpen] = useState(appBar.isOpen);
14
14
  const [panelRef, iconRef] = useOnClickOutside(() => setAppBarOpen(false));
15
15
  const [appElements, setAppElements] = useState([]);
16
- if ((!appBar.elements && !appBar.appTeaser) ||
17
- (appBar.appTeaser && Object.keys(appBar.appTeaser).length === 0))
18
- console.warn("No app elements or app teaser pages provided. Please provide at least one of them.");
16
+ if (!appBar.elements && !isEnabled)
17
+ console.warn("No app elements and user config provided. Please provide at least one of them.");
19
18
  useEffect(() => {
20
19
  if (appBar.elements)
21
20
  return;
22
21
  const defaultElements = [];
23
22
  APPS.forEach((app) => {
24
- if (!decodedAudience || !currentApp)
23
+ if (!decodedAudience || !currentApp || !activeOrg?.uuid)
25
24
  return;
26
25
  const element = {
27
26
  key: app,
28
27
  label: app.charAt(0).toUpperCase() + app.slice(1),
29
28
  active: currentApp === app,
29
+ href: currentApp === app ? "#" : undefined,
30
+ onClick: currentApp === app ? () => false : undefined,
30
31
  };
31
32
  if (app === "console") {
32
- element.href = `https://console.${decodedAudience}/${activeOrg?.uuid}`;
33
+ if (currentApp !== "console")
34
+ element.href = `https://console.${decodedAudience}/org/${activeOrg?.uuid}`;
33
35
  }
34
36
  else if (app === "modeler") {
35
- const hasPermission = activeOrg?.permissions.org.webide.read;
36
- if (hasPermission) {
37
- element.href =
38
- currentApp === "modeler"
39
- ? ""
40
- : `https://modeler.${decodedAudience}/org/${activeOrg?.uuid}`;
37
+ const hasPermission = activeOrg?.permissions?.org?.webide?.read;
38
+ if (hasPermission && currentApp !== "modeler") {
39
+ element.href = `https://modeler.${decodedAudience}/login?returnUrl=/org/${activeOrg?.uuid}`;
41
40
  }
42
41
  }
43
42
  else {
44
- const hasAppReadPermission = activeOrg?.permissions.cluster[app]?.read;
43
+ const hasAppReadPermission = activeOrg?.permissions?.cluster?.[app]?.read;
45
44
  const clustersToRender = clusters?.filter(({ status, urls }) => status[app] === "Healthy" && urls[app] && hasAppReadPermission);
46
45
  if (clustersToRender?.length === 1) {
47
- element.href = clustersToRender?.[0].urls[app];
46
+ if (currentApp !== app)
47
+ element.href = clustersToRender?.[0].urls[app];
48
48
  }
49
49
  else if (clustersToRender && clustersToRender.length > 1) {
50
+ element.onClick = undefined;
50
51
  element.subElements = clustersToRender.map((cluster, index) => ({
51
52
  key: `${app}-${cluster.uuid}-${index}`,
52
53
  label: cluster.name,
@@ -58,8 +59,11 @@ export const C3NavigationAppBar = ({ appBar, forwardRef, navbar, }) => {
58
59
  }));
59
60
  }
60
61
  else if (hasAppReadPermission) {
61
- if (appBar.appTeaser?.[app]?.routeProps) {
62
- element.routeProps = appBar.appTeaser?.[app]?.routeProps;
62
+ if (appBar.appTeaserRouteProps?.[app]) {
63
+ element.routeProps = appBar.appTeaserRouteProps?.[app];
64
+ }
65
+ else {
66
+ element.href = `https://${currentApp}.${decodedAudience}/org/${activeOrg?.uuid}/appTeaser/${app}`;
63
67
  }
64
68
  }
65
69
  }
@@ -67,7 +71,7 @@ export const C3NavigationAppBar = ({ appBar, forwardRef, navbar, }) => {
67
71
  defaultElements.push(element);
68
72
  });
69
73
  setAppElements(defaultElements);
70
- }, [JSON.stringify(clusters)]);
74
+ }, [JSON.stringify(clusters), currentApp]);
71
75
  const appBarElements = appBar.elements || (clusters ? appElements : null);
72
76
  return (React.createElement(React.Fragment, null,
73
77
  React.createElement(HeaderGlobalAction, { ref: iconRef, "aria-label": "Camunda components", isActive: appBarOpen, onClick: () => {
@@ -56,15 +56,13 @@ export type C3NavigationNotificationsSideBarProps = C3NavigationSideBarBaseProps
56
56
  type: "notifications";
57
57
  onLinkClick?: (meta: Notification["meta"]) => void;
58
58
  };
59
- type AppTeaserRoute = {
60
- routeProps: any;
61
- };
59
+ type AppTeaserRouteProps = any;
62
60
  export type C3NavigationAppBarProps = C3NavigationSideBarBaseProps & {
63
61
  type: "app";
64
- appTeaser?: {
65
- operate?: AppTeaserRoute;
66
- tasklist?: AppTeaserRoute;
67
- optimize?: AppTeaserRoute;
62
+ appTeaserRouteProps?: {
63
+ operate?: AppTeaserRouteProps;
64
+ tasklist?: AppTeaserRouteProps;
65
+ optimize?: AppTeaserRouteProps;
68
66
  };
69
67
  };
70
68
  export type C3NavigationSideBarProps = {
@@ -46,7 +46,7 @@ export const C3Navigation = ({ app, appBar, forwardRef, navbar, orgSideBar, info
46
46
  const isLargeScreen = useMediaQuery(`(min-width: ${BREAKPOINT_LG_WIDTH}`);
47
47
  const appBarElementsLength = appBar.elements?.length ?? 0;
48
48
  const displayAppBar = appBarElementsLength > 0 ||
49
- appBar.appTeaser ||
49
+ appBar.appTeaserRouteProps ||
50
50
  (!isLargeScreen && navbar.elements.length > 0);
51
51
  const orgName = activeOrg?.name || navbar.orgName;
52
52
  if (app.prefix)
@@ -13,7 +13,7 @@ export function createAppProps() {
13
13
  export function createAppBarProps(options = {}) {
14
14
  return {
15
15
  isOpen: Boolean(options?.isOpen),
16
- appTeaser: options.useElementsFromConfig
16
+ appTeaserRouteProps: options.useElementsFromConfig
17
17
  ? {
18
18
  operate: {
19
19
  routeProps: {
@@ -9,14 +9,13 @@ type C3UserConfigurationBase = {
9
9
  getNewUserToken: () => Promise<string>;
10
10
  analyticsTrack?: MixPanelTrack;
11
11
  currentApp?: "console" | "modeler" | "tasklist" | "operate" | "optimize";
12
+ handleTheme?: boolean;
12
13
  };
13
14
  type C3UserConfigurationWithEndpoints = C3UserConfigurationBase & {
14
15
  endpoints: Endpoints;
15
- handleTheme?: never;
16
16
  };
17
17
  type C3UserConfigurationWithStage = C3UserConfigurationBase & {
18
18
  stage: Stage;
19
- handleTheme?: boolean;
20
19
  };
21
20
  export type C3UserConfiguration = C3UserConfigurationWithEndpoints | C3UserConfigurationWithStage;
22
21
  export type C3UserConfigurationContextValue = C3UserConfiguration & {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/camunda-cloud/camunda-composite-components.git"
6
6
  },
7
- "version": "0.4.2-rc.0",
7
+ "version": "0.4.2-rc.2",
8
8
  "scripts": {
9
9
  "clean": "rimraf lib/",
10
10
  "build": "yarn clean && tsc",
@@ -39,16 +39,16 @@
39
39
  "@playwright/test": "1.41.2",
40
40
  "@semantic-release/changelog": "6.0.3",
41
41
  "@semantic-release/git": "10.0.1",
42
- "@storybook/addon-a11y": "7.6.10",
43
- "@storybook/addon-actions": "7.6.10",
44
- "@storybook/addon-docs": "7.6.10",
45
- "@storybook/addon-essentials": "7.6.10",
46
- "@storybook/addon-interactions": "7.6.10",
47
- "@storybook/addon-links": "7.6.10",
48
- "@storybook/blocks": "7.6.10",
42
+ "@storybook/addon-a11y": "7.6.11",
43
+ "@storybook/addon-actions": "7.6.11",
44
+ "@storybook/addon-docs": "7.6.11",
45
+ "@storybook/addon-essentials": "7.6.11",
46
+ "@storybook/addon-interactions": "7.6.11",
47
+ "@storybook/addon-links": "7.6.11",
48
+ "@storybook/blocks": "7.6.11",
49
49
  "@storybook/preset-scss": "1.0.3",
50
- "@storybook/react": "7.6.10",
51
- "@storybook/react-webpack5": "7.6.10",
50
+ "@storybook/react": "7.6.11",
51
+ "@storybook/react-webpack5": "7.6.11",
52
52
  "@storybook/test-runner": "0.16.0",
53
53
  "@storybook/testing-library": "0.2.2",
54
54
  "@types/carbon-components-react": "7.55.10",
@@ -84,7 +84,7 @@
84
84
  "sass-loader": "13.3.3",
85
85
  "semantic-release": "23.0.0",
86
86
  "serve": "14.2.1",
87
- "storybook": "7.6.10",
87
+ "storybook": "7.6.11",
88
88
  "style-loader": "3.3.4",
89
89
  "styled-components": "6.1.8",
90
90
  "typescript": "5.3.3",