@camunda/camunda-composite-components 0.22.3 → 0.22.5

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 (196) hide show
  1. package/lib/esm/package.json +98 -0
  2. package/lib/esm/src/api/api.d.ts +29 -0
  3. package/lib/esm/src/api/api.js +92 -0
  4. package/lib/esm/src/api/clusters.d.ts +10 -0
  5. package/lib/esm/src/api/clusters.js +32 -0
  6. package/lib/esm/src/api/endpoints.const.d.ts +22 -0
  7. package/lib/esm/src/api/endpoints.const.js +70 -0
  8. package/lib/esm/src/api/help-center.d.ts +42 -0
  9. package/lib/esm/src/api/help-center.js +56 -0
  10. package/lib/esm/src/api/jwt.utils.d.ts +5 -0
  11. package/lib/esm/src/api/jwt.utils.js +26 -0
  12. package/lib/esm/src/api/notifications.d.ts +41 -0
  13. package/lib/esm/src/api/notifications.js +170 -0
  14. package/lib/esm/src/api/organizations.d.ts +15 -0
  15. package/lib/esm/src/api/organizations.js +16 -0
  16. package/lib/esm/src/api/profile.d.ts +20 -0
  17. package/lib/esm/src/api/profile.js +48 -0
  18. package/lib/esm/src/api/status.d.ts +7 -0
  19. package/lib/esm/src/api/status.js +46 -0
  20. package/lib/esm/src/assets/c3-icons.d.ts +5 -0
  21. package/lib/esm/src/assets/c3-icons.js +5 -0
  22. package/lib/esm/src/assets/c3-icons.types.d.ts +3 -0
  23. package/lib/esm/src/assets/c3-icons.types.js +6 -0
  24. package/lib/esm/src/components/c3-app-teaser/app-teaser-cards-config.d.ts +5 -0
  25. package/lib/esm/src/components/c3-app-teaser/app-teaser-cards-config.js +94 -0
  26. package/lib/esm/src/components/c3-app-teaser/app-teaser-cards.d.ts +17 -0
  27. package/lib/esm/src/components/c3-app-teaser/app-teaser-cards.js +31 -0
  28. package/lib/esm/src/components/c3-app-teaser/app-teaster-card.d.ts +14 -0
  29. package/lib/esm/src/components/c3-app-teaser/app-teaster-card.js +24 -0
  30. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser-page.d.ts +9 -0
  31. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser-page.js +48 -0
  32. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser-page.test.d.ts +1 -0
  33. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser-page.test.js +33 -0
  34. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser.d.ts +14 -0
  35. package/lib/esm/src/components/c3-app-teaser/c3-app-teaser.js +53 -0
  36. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.d.ts +6 -0
  37. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.js +84 -0
  38. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.test.d.ts +1 -0
  39. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.test.js +13 -0
  40. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.types.d.ts +26 -0
  41. package/lib/esm/src/components/c3-cluster-tag/c3-cluster-tag.types.js +11 -0
  42. package/lib/esm/src/components/c3-data-table/c3-data-table.d.ts +3 -0
  43. package/lib/esm/src/components/c3-data-table/c3-data-table.js +509 -0
  44. package/lib/esm/src/components/c3-data-table/c3-data-table.types.d.ts +122 -0
  45. package/lib/esm/src/components/c3-data-table/c3-data-table.types.js +6 -0
  46. package/lib/esm/src/components/c3-data-table/link-button/link-button.d.ts +3 -0
  47. package/lib/esm/src/components/c3-data-table/link-button/link-button.js +15 -0
  48. package/lib/esm/src/components/c3-data-table/link-button/link-button.types.d.ts +8 -0
  49. package/lib/esm/src/components/c3-data-table/link-button/link-button.types.js +6 -0
  50. package/lib/esm/src/components/c3-empty-state/c3-empty-state.d.ts +3 -0
  51. package/lib/esm/src/components/c3-empty-state/c3-empty-state.js +15 -0
  52. package/lib/esm/src/components/c3-empty-state/c3-empty-state.test.d.ts +1 -0
  53. package/lib/esm/src/components/c3-empty-state/c3-empty-state.test.js +25 -0
  54. package/lib/esm/src/components/c3-empty-state/c3-empty-state.types.d.ts +29 -0
  55. package/lib/esm/src/components/c3-empty-state/c3-empty-state.types.js +6 -0
  56. package/lib/esm/src/components/c3-help-center/c3-help-center-provider.d.ts +19 -0
  57. package/lib/esm/src/components/c3-help-center/c3-help-center-provider.js +58 -0
  58. package/lib/esm/src/components/c3-help-center/c3-help-center.d.ts +16 -0
  59. package/lib/esm/src/components/c3-help-center/c3-help-center.js +218 -0
  60. package/lib/esm/src/components/c3-help-center/c3-help-center.types.d.ts +43 -0
  61. package/lib/esm/src/components/c3-help-center/c3-help-center.types.js +6 -0
  62. package/lib/esm/src/components/c3-help-center/defaultHelpCenterConfig.d.ts +10 -0
  63. package/lib/esm/src/components/c3-help-center/defaultHelpCenterConfig.js +17 -0
  64. package/lib/esm/src/components/c3-help-center/help-center-hint.d.ts +4 -0
  65. package/lib/esm/src/components/c3-help-center/help-center-hint.js +15 -0
  66. package/lib/esm/src/components/c3-help-center/help-center.d.ts +18 -0
  67. package/lib/esm/src/components/c3-help-center/help-center.js +189 -0
  68. package/lib/esm/src/components/c3-help-center/recommendations.d.ts +4 -0
  69. package/lib/esm/src/components/c3-help-center/recommendations.js +55 -0
  70. package/lib/esm/src/components/c3-help-center/styles.d.ts +4 -0
  71. package/lib/esm/src/components/c3-help-center/styles.js +48 -0
  72. package/lib/esm/src/components/c3-help-center/tabs/feedback.d.ts +9 -0
  73. package/lib/esm/src/components/c3-help-center/tabs/feedback.js +141 -0
  74. package/lib/esm/src/components/c3-help-center/tabs/tabContent.d.ts +20 -0
  75. package/lib/esm/src/components/c3-help-center/tabs/tabContent.js +22 -0
  76. package/lib/esm/src/components/c3-help-center/tabs/tabContentSkeleton.d.ts +2 -0
  77. package/lib/esm/src/components/c3-help-center/tabs/tabContentSkeleton.js +26 -0
  78. package/lib/esm/src/components/c3-help-center/tile.d.ts +10 -0
  79. package/lib/esm/src/components/c3-help-center/tile.js +61 -0
  80. package/lib/esm/src/components/c3-navigation/c3-info-button.d.ts +4 -0
  81. package/lib/esm/src/components/c3-navigation/c3-info-button.js +9 -0
  82. package/lib/esm/src/components/c3-navigation/c3-navigation-actions/c3-action-buttons.d.ts +6 -0
  83. package/lib/esm/src/components/c3-navigation/c3-navigation-actions/c3-action-buttons.js +18 -0
  84. package/lib/esm/src/components/c3-navigation/c3-navigation-actions/c3-action-buttons.types.d.ts +10 -0
  85. package/lib/esm/src/components/c3-navigation/c3-navigation-actions/c3-action-buttons.types.js +6 -0
  86. package/lib/esm/src/components/c3-navigation/c3-navigation-appbar/c3-navigation-appbar.d.ts +4 -0
  87. package/lib/esm/src/components/c3-navigation/c3-navigation-appbar/c3-navigation-appbar.js +380 -0
  88. package/lib/esm/src/components/c3-navigation/c3-navigation-appbar/components.d.ts +2 -0
  89. package/lib/esm/src/components/c3-navigation/c3-navigation-appbar/components.js +21 -0
  90. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-info-sidebar.d.ts +6 -0
  91. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-info-sidebar.js +38 -0
  92. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar-element.d.ts +12 -0
  93. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar-element.js +68 -0
  94. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar.d.ts +10 -0
  95. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar.js +87 -0
  96. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar.types.d.ts +81 -0
  97. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-navigation-sidebar.types.js +6 -0
  98. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-notification-sidebar.d.ts +5 -0
  99. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-notification-sidebar.js +107 -0
  100. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-sidebar-state-provider.d.ts +29 -0
  101. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-sidebar-state-provider.js +54 -0
  102. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-user-sidebar.d.ts +6 -0
  103. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/c3-user-sidebar.js +57 -0
  104. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/components.d.ts +2 -0
  105. package/lib/esm/src/components/c3-navigation/c3-navigation-sidebar/components.js +11 -0
  106. package/lib/esm/src/components/c3-navigation/c3-navigation.d.ts +7 -0
  107. package/lib/esm/src/components/c3-navigation/c3-navigation.js +262 -0
  108. package/lib/esm/src/components/c3-navigation/c3-navigation.test.d.ts +1 -0
  109. package/lib/esm/src/components/c3-navigation/c3-navigation.test.js +89 -0
  110. package/lib/esm/src/components/c3-navigation/c3-navigation.types.d.ts +97 -0
  111. package/lib/esm/src/components/c3-navigation/c3-navigation.types.js +6 -0
  112. package/lib/esm/src/components/c3-navigation/c3-notification-provider/c3-notification-container.d.ts +13 -0
  113. package/lib/esm/src/components/c3-navigation/c3-notification-provider/c3-notification-container.js +100 -0
  114. package/lib/esm/src/components/c3-navigation/c3-notification-provider/c3-notification-provider.d.ts +19 -0
  115. package/lib/esm/src/components/c3-navigation/c3-notification-provider/c3-notification-provider.js +110 -0
  116. package/lib/esm/src/components/c3-navigation/c3-org-name.d.ts +6 -0
  117. package/lib/esm/src/components/c3-navigation/c3-org-name.js +34 -0
  118. package/lib/esm/src/components/c3-navigation/c3-org-sidebar/c3-org-sidebar.d.ts +6 -0
  119. package/lib/esm/src/components/c3-navigation/c3-org-sidebar/c3-org-sidebar.js +188 -0
  120. package/lib/esm/src/components/c3-navigation/c3-org-sidebar/components.d.ts +29 -0
  121. package/lib/esm/src/components/c3-navigation/c3-org-sidebar/components.js +92 -0
  122. package/lib/esm/src/components/c3-navigation/helpers.d.ts +8 -0
  123. package/lib/esm/src/components/c3-navigation/helpers.js +58 -0
  124. package/lib/esm/src/components/c3-navigation/index.d.ts +2 -0
  125. package/lib/esm/src/components/c3-navigation/index.js +8 -0
  126. package/lib/esm/src/components/c3-navigation/stories/story-helpers.d.ts +35 -0
  127. package/lib/esm/src/components/c3-navigation/stories/story-helpers.js +264 -0
  128. package/lib/esm/src/components/c3-navigation/stories/story-templates.d.ts +9 -0
  129. package/lib/esm/src/components/c3-navigation/stories/story-templates.js +38 -0
  130. package/lib/esm/src/components/c3-onboarding-survey/c3-onboarding-survey.d.ts +14 -0
  131. package/lib/esm/src/components/c3-onboarding-survey/c3-onboarding-survey.js +94 -0
  132. package/lib/esm/src/components/c3-onboarding-survey/defaultOnboardingConfig.d.ts +16 -0
  133. package/lib/esm/src/components/c3-onboarding-survey/defaultOnboardingConfig.js +8 -0
  134. package/lib/esm/src/components/c3-onboarding-survey/elements/dropdownSelect.d.ts +15 -0
  135. package/lib/esm/src/components/c3-onboarding-survey/elements/dropdownSelect.js +58 -0
  136. package/lib/esm/src/components/c3-onboarding-survey/elements/inlineNotification.d.ts +3 -0
  137. package/lib/esm/src/components/c3-onboarding-survey/elements/inlineNotification.js +10 -0
  138. package/lib/esm/src/components/c3-onboarding-survey/elements/radioGroupMulti.d.ts +7 -0
  139. package/lib/esm/src/components/c3-onboarding-survey/elements/radioGroupMulti.js +53 -0
  140. package/lib/esm/src/components/c3-onboarding-survey/elements/radioGroupSingle.d.ts +7 -0
  141. package/lib/esm/src/components/c3-onboarding-survey/elements/radioGroupSingle.js +36 -0
  142. package/lib/esm/src/components/c3-onboarding-survey/elements/textField.d.ts +6 -0
  143. package/lib/esm/src/components/c3-onboarding-survey/elements/textField.js +14 -0
  144. package/lib/esm/src/components/c3-onboarding-survey/helpers.d.ts +1 -0
  145. package/lib/esm/src/components/c3-onboarding-survey/helpers.js +10 -0
  146. package/lib/esm/src/components/c3-onboarding-survey/onboarding.types.d.ts +30 -0
  147. package/lib/esm/src/components/c3-onboarding-survey/onboarding.types.js +13 -0
  148. package/lib/esm/src/components/c3-onboarding-survey/onboardingModal.d.ts +25 -0
  149. package/lib/esm/src/components/c3-onboarding-survey/onboardingModal.js +52 -0
  150. package/lib/esm/src/components/c3-onboarding-survey/onboardingPage.d.ts +21 -0
  151. package/lib/esm/src/components/c3-onboarding-survey/onboardingPage.js +35 -0
  152. package/lib/esm/src/components/c3-onboarding-survey/onboardingSurvey.d.ts +17 -0
  153. package/lib/esm/src/components/c3-onboarding-survey/onboardingSurvey.js +148 -0
  154. package/lib/esm/src/components/c3-onboarding-survey/step.d.ts +7 -0
  155. package/lib/esm/src/components/c3-onboarding-survey/step.js +44 -0
  156. package/lib/esm/src/components/c3-page/c3-breadcrumb/c3-breadcrumb.d.ts +3 -0
  157. package/lib/esm/src/components/c3-page/c3-breadcrumb/c3-breadcrumb.js +28 -0
  158. package/lib/esm/src/components/c3-page/c3-breadcrumb/c3-breadcrumb.types.d.ts +19 -0
  159. package/lib/esm/src/components/c3-page/c3-breadcrumb/c3-breadcrumb.types.js +6 -0
  160. package/lib/esm/src/components/c3-page/c3-page.d.ts +4 -0
  161. package/lib/esm/src/components/c3-page/c3-page.js +16 -0
  162. package/lib/esm/src/components/c3-page/c3-page.test.d.ts +1 -0
  163. package/lib/esm/src/components/c3-page/c3-page.test.js +25 -0
  164. package/lib/esm/src/components/c3-page/c3-page.types.d.ts +18 -0
  165. package/lib/esm/src/components/c3-page/c3-page.types.js +6 -0
  166. package/lib/esm/src/components/c3-page/c3-tabs/c3-tabs.d.ts +3 -0
  167. package/lib/esm/src/components/c3-page/c3-tabs/c3-tabs.js +37 -0
  168. package/lib/esm/src/components/c3-page/c3-tabs/c3-tabs.types.d.ts +14 -0
  169. package/lib/esm/src/components/c3-page/c3-tabs/c3-tabs.types.js +6 -0
  170. package/lib/esm/src/components/c3-responsive-stack/c3-responsive-stack.d.ts +2 -0
  171. package/lib/esm/src/components/c3-responsive-stack/c3-responsive-stack.js +18 -0
  172. package/lib/esm/src/components/c3-user-configuration/authToken.d.ts +30 -0
  173. package/lib/esm/src/components/c3-user-configuration/authToken.js +30 -0
  174. package/lib/esm/src/components/c3-user-configuration/c3-profile-provider/c3-profile-provider.d.ts +26 -0
  175. package/lib/esm/src/components/c3-user-configuration/c3-profile-provider/c3-profile-provider.js +117 -0
  176. package/lib/esm/src/components/c3-user-configuration/c3-profile-provider/carbon-theme-provider.d.ts +13 -0
  177. package/lib/esm/src/components/c3-user-configuration/c3-profile-provider/carbon-theme-provider.js +29 -0
  178. package/lib/esm/src/components/c3-user-configuration/c3-user-configuration-provider.d.ts +54 -0
  179. package/lib/esm/src/components/c3-user-configuration/c3-user-configuration-provider.js +43 -0
  180. package/lib/esm/src/components/styles.d.ts +13 -0
  181. package/lib/esm/src/components/styles.js +90 -0
  182. package/lib/esm/src/components/test-utils.d.ts +3 -0
  183. package/lib/esm/src/components/test-utils.js +32 -0
  184. package/lib/esm/src/contexts/c3-cluster-update-manager.d.ts +12 -0
  185. package/lib/esm/src/contexts/c3-cluster-update-manager.js +27 -0
  186. package/lib/esm/src/hooks/useApi.d.ts +20 -0
  187. package/lib/esm/src/hooks/useApi.js +54 -0
  188. package/lib/esm/src/index.d.ts +23 -0
  189. package/lib/esm/src/index.js +19 -0
  190. package/lib/esm/src/utils/camunda.d.ts +21 -0
  191. package/lib/esm/src/utils/camunda.js +59 -0
  192. package/lib/esm/src/utils/camunda.types.d.ts +63 -0
  193. package/lib/esm/src/utils/camunda.types.js +6 -0
  194. package/lib/esm/src/utils/versionCheck.utils.d.ts +15 -0
  195. package/lib/esm/src/utils/versionCheck.utils.js +79 -0
  196. package/package.json +18 -18
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
3
+ * under one or more contributor license agreements. Licensed under a commercial license.
4
+ * You may not use this file except in compliance with the commercial license.
5
+ */
6
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { JSX } from 'react';
2
+ import type { C3EmptyStateProps } from './c3-empty-state.types';
3
+ export declare const C3EmptyState: ({ icon, heading, description, button, buttons, link, }: C3EmptyStateProps) => JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
4
+ * under one or more contributor license agreements. Licensed under a commercial license.
5
+ * You may not use this file except in compliance with the commercial license.
6
+ */
7
+ import { Button, Link, MenuButton, MenuItem, Stack, Tile } from '@carbon/react';
8
+ import { C3ResponsiveStack } from '../c3-responsive-stack/c3-responsive-stack.js';
9
+ export const C3EmptyState = ({ icon, heading, description, button, buttons, link, }) => (_jsx(_Fragment, { children: _jsx(Tile, { style: {
10
+ paddingLeft: '5rem',
11
+ paddingTop: '3rem',
12
+ paddingBottom: '3rem',
13
+ }, children: _jsxs(C3ResponsiveStack, { orientation: 'horizontal', gap: '1.5rem', children: [icon && (_jsx("div", { style: { maxWidth: '80px' }, children: _jsx("img", { src: icon.path, alt: icon.altText, style: { width: '100%' } }) })), _jsxs(Stack, { gap: 3, children: [_jsx("h2", { children: heading }), _jsxs(Stack, { gap: 6, children: [_jsx("p", { style: { maxWidth: '400px' }, children: description }), _jsxs(Stack, { gap: 5, children: [buttons && buttons.length > 0 ? (_jsx("div", { style: { display: 'flex', gap: '0.5rem' }, children: buttons.map((btn, index) => 'items' in btn ? (_jsx(MenuButton, { size: 'md', disabled: btn.disabled, label: btn.label, kind: index === 0 ? undefined : 'tertiary', menuAlignment: 'bottom', children: btn.items.map((menuItem) => (_jsx(MenuItem, { onClick: menuItem.onClick, renderIcon: menuItem.icon, disabled: menuItem.disabled, label: menuItem.label }, menuItem.id))) }, btn.id)) : (_jsx(Button, { id: btn.id, size: 'md', kind: index === 0 ? undefined : 'tertiary', onClick: btn.onClick, renderIcon: btn.icon, disabled: btn.disabled, children: btn.label }, btn.id))) })) : button ? (_jsx(_Fragment, { children: 'items' in button ? (_jsx(MenuButton, { size: 'md', disabled: button.disabled, label: button.label, menuAlignment: 'bottom', children: button.items.map((menuItem) => {
14
+ return (_jsx(MenuItem, { onClick: menuItem.onClick, renderIcon: menuItem.icon, disabled: menuItem.disabled, label: menuItem.label }, menuItem.id));
15
+ }) })) : (_jsx(Button, { id: button.id, size: 'md', onClick: button.onClick, renderIcon: button.icon, disabled: button.disabled, children: button.label })) })) : null, link && (_jsx("div", { children: _jsx(Link, { target: '_blank', href: link.href, onClick: link.onClick, children: link.label }) }))] })] })] })] }) }) }));
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
3
+ * under one or more contributor license agreements. Licensed under a commercial license.
4
+ * You may not use this file except in compliance with the commercial license.
5
+ */
6
+ import { expect, test } from '@playwright/test';
7
+ import { getStory } from '../test-utils.js';
8
+ test.describe('Empty State', () => {
9
+ test('Basic', async ({ page }) => {
10
+ await getStory(page, 'components-c3emptystate--basic');
11
+ await expect(page).toHaveScreenshot();
12
+ });
13
+ test('No icon', async ({ page }) => {
14
+ await getStory(page, 'components-c3emptystate--no-icon');
15
+ await expect(page).toHaveScreenshot();
16
+ });
17
+ test('Button with menu', async ({ page }) => {
18
+ await getStory(page, 'components-c3emptystate--button-with-menu');
19
+ await expect(page).toHaveScreenshot();
20
+ });
21
+ test('Multiple buttons with menu button', async ({ page }) => {
22
+ await getStory(page, 'components-c3emptystate--multiple-buttons-with-menu-button');
23
+ await expect(page).toHaveScreenshot();
24
+ });
25
+ });
@@ -0,0 +1,29 @@
1
+ import type { ReactElement } from 'react';
2
+ export type Button = {
3
+ onClick: () => void;
4
+ disabled?: boolean;
5
+ label: string;
6
+ icon?: any;
7
+ id?: string;
8
+ };
9
+ export type MenuButton = {
10
+ disabled?: boolean;
11
+ label: string;
12
+ id?: string;
13
+ items: Button[];
14
+ };
15
+ export interface C3EmptyStateProps {
16
+ heading: string;
17
+ description: string | ReactElement;
18
+ icon?: {
19
+ path: string;
20
+ altText: string;
21
+ };
22
+ button?: Button | MenuButton;
23
+ buttons?: Array<Button | MenuButton>;
24
+ link?: {
25
+ href: string;
26
+ label: string;
27
+ onClick?: () => void;
28
+ };
29
+ }
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
3
+ * under one or more contributor license agreements. Licensed under a commercial license.
4
+ * You may not use this file except in compliance with the commercial license.
5
+ */
6
+ export {};
@@ -0,0 +1,19 @@
1
+ import React, { type FC, type PropsWithChildren } from 'react';
2
+ export declare enum HelpCenterHintType {
3
+ HelpCenter = "help-center",
4
+ Onboarding = "onboarding"
5
+ }
6
+ export type C3HelpCenterContextValue = {
7
+ openHelpCenter: (showTabId?: string) => void;
8
+ setIsHelpCenterOpen: (isOpen: boolean) => void;
9
+ isHelpCenterOpen: boolean;
10
+ showTabId?: string | null;
11
+ showHint: boolean;
12
+ setShowHint: (showHint: boolean) => void;
13
+ setShowHintOnClose: (showHintOnClose: boolean) => void;
14
+ hintType: HelpCenterHintType;
15
+ setHintType: (hintType: HelpCenterHintType) => void;
16
+ };
17
+ export declare const C3HelpCenterContext: React.Context<C3HelpCenterContextValue>;
18
+ export declare const C3HelpCenterProvider: FC<PropsWithChildren>;
19
+ export declare const useC3HelpCenter: () => C3HelpCenterContextValue;
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
4
+ * under one or more contributor license agreements. Licensed under a commercial license.
5
+ * You may not use this file except in compliance with the commercial license.
6
+ */
7
+ import React, { useEffect, useState, } from 'react';
8
+ export var HelpCenterHintType;
9
+ (function (HelpCenterHintType) {
10
+ HelpCenterHintType["HelpCenter"] = "help-center";
11
+ HelpCenterHintType["Onboarding"] = "onboarding";
12
+ })(HelpCenterHintType || (HelpCenterHintType = {}));
13
+ export const C3HelpCenterContext = React.createContext({
14
+ openHelpCenter: () => undefined,
15
+ setIsHelpCenterOpen: () => undefined,
16
+ isHelpCenterOpen: false,
17
+ showHint: false,
18
+ setShowHint: () => undefined,
19
+ setShowHintOnClose: () => undefined,
20
+ hintType: HelpCenterHintType.Onboarding,
21
+ setHintType: () => undefined,
22
+ });
23
+ export const C3HelpCenterProvider = ({ children }) => {
24
+ const [isHelpCenterOpen, setIsHelpCenterOpen] = useState(false);
25
+ const [activeTabId, setActiveTabId] = useState(null);
26
+ const [showHint, setShowHint] = useState(false);
27
+ const [showHintOnClose, setShowHintOnClose] = useState(false);
28
+ const [hintType, setHintType] = useState(HelpCenterHintType.Onboarding);
29
+ const openHelpCenter = (showTabId) => {
30
+ if (!isHelpCenterOpen) {
31
+ setIsHelpCenterOpen(true);
32
+ setShowHint(false);
33
+ }
34
+ if (showTabId)
35
+ setActiveTabId(showTabId);
36
+ };
37
+ useEffect(() => {
38
+ if (!isHelpCenterOpen) {
39
+ setActiveTabId(null);
40
+ if (showHintOnClose) {
41
+ setShowHintOnClose(false);
42
+ setTimeout(() => setShowHint(true), 240);
43
+ }
44
+ }
45
+ }, [isHelpCenterOpen]);
46
+ return (_jsx(C3HelpCenterContext.Provider, { value: {
47
+ openHelpCenter,
48
+ setIsHelpCenterOpen,
49
+ isHelpCenterOpen,
50
+ showTabId: activeTabId,
51
+ showHint,
52
+ setShowHint,
53
+ setShowHintOnClose,
54
+ hintType,
55
+ setHintType,
56
+ }, children: children }));
57
+ };
58
+ export const useC3HelpCenter = () => React.useContext(C3HelpCenterContext);
@@ -0,0 +1,16 @@
1
+ import type { Dict } from 'mixpanel-browser';
2
+ import { type FC } from 'react';
3
+ import { type Theme } from '../c3-user-configuration/c3-profile-provider/c3-profile-provider';
4
+ import type { Persona } from './c3-help-center.types';
5
+ export interface C3HelpCenterProps {
6
+ origin?: 'console' | 'webmodeler' | 'operate' | 'tasklist' | 'optimize' | 'identity' | 'admin';
7
+ theme?: Theme;
8
+ flags?: string[];
9
+ activeTab?: string;
10
+ autoStartSurvey?: boolean;
11
+ onPersonaChange?: (persona: Persona) => void;
12
+ onRequestClose?: () => void;
13
+ onRequestOpen?: () => void;
14
+ mixpanelTrack?: (event: string, data: Dict | undefined) => void;
15
+ }
16
+ export declare const C3HelpCenter: FC<C3HelpCenterProps>;
@@ -0,0 +1,218 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
4
+ * under one or more contributor license agreements. Licensed under a commercial license.
5
+ * You may not use this file except in compliance with the commercial license.
6
+ */
7
+ import { ActionableNotification, ComposedModal, Layer, ModalBody, ModalHeader, } from '@carbon/react';
8
+ import React, { useEffect, useRef, useState } from 'react';
9
+ import { ErrorBoundary } from 'react-error-boundary';
10
+ import styled from 'styled-components';
11
+ import { getConfig, updatePersona } from '../../api/help-center.js';
12
+ import { C3OnboardingSurvey } from '../c3-onboarding-survey/c3-onboarding-survey.js';
13
+ import { defaultTheme, useC3Profile, } from '../c3-user-configuration/c3-profile-provider/c3-profile-provider.js';
14
+ import { resolveTheme, } from '../c3-user-configuration/c3-profile-provider/carbon-theme-provider.js';
15
+ import { useC3UserConfiguration } from '../c3-user-configuration/c3-user-configuration-provider.js';
16
+ import { useC3HelpCenter } from './c3-help-center-provider.js';
17
+ import { defaultHelpCenterConfig } from './defaultHelpCenterConfig.js';
18
+ import { HelpCenter } from './help-center.js';
19
+ const StyledComposedModal = styled(ComposedModal) `
20
+ .cds--modal-scroll-content {
21
+ mask-image: none;
22
+ }
23
+ `;
24
+ export const C3HelpCenter = ({ autoStartSurvey, origin, flags, onRequestClose, mixpanelTrack: customMixpanelTrack, onRequestOpen, theme, onPersonaChange, activeTab, }) => {
25
+ const { isHelpCenterOpen: isOpen, setIsHelpCenterOpen, setShowHintOnClose, } = useC3HelpCenter();
26
+ const { userToken, decodedToken, activeOrganizationId, handleTheme, decodedAudience, analyticsTrack, currentApp, } = useC3UserConfiguration();
27
+ const { theme: themeConfig, isEnabled, reloadClusters } = useC3Profile();
28
+ const themeHandlingEnabled = isEnabled && !!handleTheme && !!themeConfig;
29
+ const themeRef = useRef('system');
30
+ const [resolvedTheme, setResolvedTheme] = useState(defaultTheme);
31
+ const [persona, setPersona] = useState(undefined);
32
+ const [userId, setUserId] = useState('');
33
+ const [helpCenterConfig, setHelpCenterConfig] = useState(defaultHelpCenterConfig);
34
+ const [email, setEmail] = useState('');
35
+ const [showSurvey, setShowSurvey] = useState(autoStartSurvey);
36
+ if (!origin && !currentApp)
37
+ console.warn('No app provided to the help center. Please provide the `currentApp` prop to the `C3UserConfigurationProvider`.');
38
+ const hostApp = origin || currentApp === 'modeler' ? 'webmodeler' : currentApp || 'console';
39
+ const mixpanelTrack = (event, data) => {
40
+ if (customMixpanelTrack) {
41
+ customMixpanelTrack(event, data);
42
+ }
43
+ else if (analyticsTrack) {
44
+ analyticsTrack(event, data);
45
+ }
46
+ };
47
+ useEffect(() => {
48
+ const updateResolvedTheme = ({ matches }) => {
49
+ if (themeRef.current === 'system') {
50
+ setResolvedTheme(matches ? 'light' : 'dark');
51
+ }
52
+ };
53
+ window
54
+ .matchMedia('(prefers-color-scheme: light)')
55
+ .addEventListener('change', updateResolvedTheme);
56
+ return () => {
57
+ window
58
+ .matchMedia('(prefers-color-scheme: light)')
59
+ .removeEventListener('change', updateResolvedTheme);
60
+ };
61
+ }, []);
62
+ useEffect(() => {
63
+ const newTheme = themeHandlingEnabled ? themeConfig : theme;
64
+ if (newTheme) {
65
+ themeRef.current = newTheme;
66
+ }
67
+ setResolvedTheme(resolveTheme(newTheme || 'light'));
68
+ }, [theme, themeConfig, isOpen]);
69
+ const fetchConfig = async () => {
70
+ if (!userToken || !decodedAudience)
71
+ return;
72
+ const { result: config } = await getConfig(userToken, decodedAudience, activeOrganizationId);
73
+ setHelpCenterConfig(config || defaultHelpCenterConfig);
74
+ };
75
+ const isFirstLoad = useRef(true);
76
+ const fetchData = async () => {
77
+ if (!userToken || !decodedToken || !decodedAudience)
78
+ return;
79
+ const { userId, meta, persona: tokenPersona } = decodedToken;
80
+ if (tokenPersona !== undefined) {
81
+ setPersona(tokenPersona);
82
+ if (tokenPersona.wasShown) {
83
+ setShowSurvey(false);
84
+ }
85
+ }
86
+ else {
87
+ setPersona({ wasShown: false });
88
+ }
89
+ if (meta)
90
+ setEmail(meta.email);
91
+ if (userId)
92
+ setUserId(userId);
93
+ if (autoStartSurvey && !tokenPersona?.wasShown) {
94
+ setIsHelpCenterOpen(true);
95
+ onRequestOpen?.();
96
+ }
97
+ await fetchConfig();
98
+ isFirstLoad.current = false;
99
+ };
100
+ React.useEffect(() => {
101
+ fetchData();
102
+ }, [JSON.stringify(decodedToken), decodedAudience]);
103
+ useEffect(() => {
104
+ if (isFirstLoad.current ||
105
+ !userToken ||
106
+ !decodedAudience ||
107
+ !persona?.complete)
108
+ return;
109
+ fetchConfig();
110
+ reloadClusters();
111
+ }, [persona?.complete]);
112
+ useEffect(() => {
113
+ if (isFirstLoad.current || !activeOrganizationId)
114
+ return;
115
+ fetchConfig();
116
+ reloadClusters();
117
+ }, [activeOrganizationId]);
118
+ React.useEffect(() => {
119
+ const tabs = helpCenterConfig.tabs;
120
+ const firstTab = tabs[0]?.id;
121
+ if (isOpen) {
122
+ if (autoStartSurvey && !persona?.wasShown) {
123
+ setShowHintOnClose(true);
124
+ }
125
+ if (persona && !persona.wasShown && decodedAudience) {
126
+ updatePersona({
127
+ newPersona: { ...persona, wasShown: true },
128
+ audience: decodedAudience,
129
+ accessToken: userToken,
130
+ orgId: activeOrganizationId,
131
+ userId,
132
+ });
133
+ setPersona({ wasShown: true });
134
+ }
135
+ mixpanelTrack?.('helpcenter:open', {
136
+ to: activeTab ?? firstTab,
137
+ from: origin,
138
+ });
139
+ }
140
+ }, [isOpen]);
141
+ const onRequestRetakeSurvey = () => {
142
+ if (!userToken || !activeOrganizationId || !decodedAudience)
143
+ return;
144
+ const newPersona = {
145
+ ...persona,
146
+ ...{ nextStep: 0, complete: false },
147
+ };
148
+ setPersona(newPersona);
149
+ updatePersona({
150
+ newPersona,
151
+ audience: decodedAudience,
152
+ accessToken: userToken,
153
+ orgId: activeOrganizationId,
154
+ userId,
155
+ });
156
+ onPersonaChange?.(newPersona);
157
+ setShowSurvey(true);
158
+ };
159
+ const onRequestResumeSurvey = () => {
160
+ if (!userToken || !activeOrganizationId || !decodedAudience)
161
+ return;
162
+ const newPersona = { ...persona, ...{ complete: false, wasShown: true } };
163
+ setPersona(newPersona);
164
+ updatePersona({
165
+ newPersona,
166
+ audience: decodedAudience,
167
+ accessToken: userToken,
168
+ orgId: activeOrganizationId,
169
+ userId,
170
+ });
171
+ onPersonaChange?.(newPersona);
172
+ setShowSurvey(true);
173
+ };
174
+ const onRequestSkipSurvey = () => {
175
+ if (!userToken || !activeOrganizationId || !decodedAudience)
176
+ return;
177
+ const newPersona = { ...persona, ...{ complete: false, wasShown: true } };
178
+ setPersona(newPersona);
179
+ updatePersona({
180
+ newPersona,
181
+ audience: decodedAudience,
182
+ accessToken: userToken,
183
+ orgId: activeOrganizationId,
184
+ userId,
185
+ });
186
+ onPersonaChange?.(newPersona);
187
+ setShowSurvey(false);
188
+ };
189
+ const personaCallback = (newPersona) => {
190
+ setPersona(newPersona);
191
+ onPersonaChange?.(newPersona);
192
+ if (newPersona.complete) {
193
+ setShowSurvey(false);
194
+ }
195
+ };
196
+ const closeFn = () => {
197
+ setIsHelpCenterOpen(false);
198
+ if (persona && userToken && activeOrganizationId && decodedAudience) {
199
+ updatePersona({
200
+ newPersona: persona,
201
+ audience: decodedAudience,
202
+ accessToken: userToken,
203
+ orgId: activeOrganizationId,
204
+ userId,
205
+ });
206
+ }
207
+ onRequestClose?.();
208
+ fetchConfig();
209
+ reloadClusters();
210
+ // wait for modal transition
211
+ setTimeout(() => {
212
+ setShowSurvey(false);
213
+ }, 400);
214
+ };
215
+ return (_jsx(Layer, { children: _jsx(StyledComposedModal, { open: isOpen, size: 'lg', onClose: closeFn, className: 'help-center', "aria-label": 'HelpCenter', preventCloseOnClickOutside: true, style: showSurvey || !persona?.wasShown
216
+ ? { backgroundColor: 'rgba(22,22,22, 0.8)' }
217
+ : {}, children: _jsx(ErrorBoundary, { fallbackRender: () => (_jsxs(_Fragment, { children: [_jsx(ModalHeader, { title: 'Help Center', closeModal: closeFn }), _jsx(ModalBody, { children: _jsx(ActionableNotification, { inline: true, hideCloseButton: true, lowContrast: true, kind: 'error', title: 'Something went wrong.', subtitle: 'Try reloading the page.', actionButtonLabel: 'Reload', onActionButtonClick: () => window.location.reload() }) })] })), children: showSurvey || !persona?.wasShown ? (_jsx(C3OnboardingSurvey, { personaCallback: personaCallback, persona: persona, mixpanelTrack: mixpanelTrack, onRequestClose: closeFn, onRequestSkip: onRequestSkipSurvey, theme: resolvedTheme, origin: hostApp, modal: true })) : (_jsx(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 })) }) }) }));
218
+ };
@@ -0,0 +1,43 @@
1
+ import type { TabType } from './tabs/tabContent';
2
+ export interface Persona {
3
+ role?: string;
4
+ company?: string;
5
+ interestedInExecutingProcess?: boolean;
6
+ goal?: string[];
7
+ orchestrate?: string[];
8
+ client?: string;
9
+ clientToSupport?: string;
10
+ bpmnExperience?: string;
11
+ camunda7Experience?: string;
12
+ nextStep?: number;
13
+ complete?: boolean;
14
+ wasShown?: boolean;
15
+ [attribute: string]: unknown;
16
+ }
17
+ export interface WpCardType {
18
+ image: string;
19
+ title: string;
20
+ description: string;
21
+ timeToComplete?: string;
22
+ cta?: string;
23
+ link?: string;
24
+ card_id: string;
25
+ mixpanelId: string;
26
+ }
27
+ export interface Prerequestite {
28
+ id: string;
29
+ value: string;
30
+ not: boolean;
31
+ }
32
+ export interface TileConfig {
33
+ id: string;
34
+ bool: string;
35
+ prerequestites: Prerequestite[] | boolean;
36
+ }
37
+ export type Tab = {
38
+ id: string;
39
+ label: string;
40
+ title: string;
41
+ tiles: TileConfig[];
42
+ tiletype: TabType;
43
+ };
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
3
+ * under one or more contributor license agreements. Licensed under a commercial license.
4
+ * You may not use this file except in compliance with the commercial license.
5
+ */
6
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { Tab } from './c3-help-center.types';
2
+ export type HelpCenterConfig = {
3
+ tabs: Tab[];
4
+ links?: {
5
+ label: string;
6
+ link: string;
7
+ id: string;
8
+ }[];
9
+ };
10
+ export declare const defaultHelpCenterConfig: HelpCenterConfig;
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
3
+ * under one or more contributor license agreements. Licensed under a commercial license.
4
+ * You may not use this file except in compliance with the commercial license.
5
+ */
6
+ export const defaultHelpCenterConfig = {
7
+ tabs: [
8
+ {
9
+ id: 'recommendations',
10
+ label: 'Your recommendations',
11
+ title: '',
12
+ tiletype: 'grid',
13
+ tiles: [],
14
+ },
15
+ ],
16
+ links: [],
17
+ };
@@ -0,0 +1,4 @@
1
+ import type { JSX } from 'react';
2
+ export declare const HelpCenterHint: ({ children }: {
3
+ children: JSX.Element;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
4
+ * under one or more contributor license agreements. Licensed under a commercial license.
5
+ * You may not use this file except in compliance with the commercial license.
6
+ */
7
+ // React import not required with automatic JSX runtime
8
+ import { Button, Toggletip, ToggletipActions, ToggletipContent, } from '@carbon/react';
9
+ import { HelpCenterHintType, useC3HelpCenter } from './c3-help-center-provider.js';
10
+ export const HelpCenterHint = ({ children }) => {
11
+ const { showHint, setShowHint, hintType } = useC3HelpCenter();
12
+ return showHint ? (_jsxs(Toggletip, { defaultOpen: true, align: 'bottom-right', children: [children, _jsxs(ToggletipContent, { children: [_jsx("p", { children: hintType === HelpCenterHintType.HelpCenter
13
+ ? 'Access the Help Center at any time to see your recommendations, discover guides, tutorials, or to share feedback.'
14
+ : 'Access the onboarding survey from the Help Center to get personalized next steps and educational content.' }), _jsx(ToggletipActions, { children: _jsx(Button, { size: 'sm', onClick: () => setShowHint(false), children: "Got it" }) })] })] })) : (children);
15
+ };
@@ -0,0 +1,18 @@
1
+ import type { Dict } from 'mixpanel-browser';
2
+ import { type FC } from 'react';
3
+ import type { Persona } from './c3-help-center.types';
4
+ import type { HelpCenterConfig } from './defaultHelpCenterConfig';
5
+ export declare const HelpCenter: FC<{
6
+ configuration: HelpCenterConfig;
7
+ persona: Persona;
8
+ email: string;
9
+ audience: string;
10
+ onRequestResumeSurvey: () => void;
11
+ onRequestRetakeSurvey: () => void;
12
+ onRequestClose: () => void;
13
+ theme: string;
14
+ origin: string;
15
+ initialTab: string | undefined;
16
+ flags?: string[];
17
+ mixpanelTrack?: (event: string, data: Dict | undefined) => void;
18
+ }>;