@atlaskit/smart-card 26.48.4 → 26.48.6

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 (51) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/constants.js +3 -1
  3. package/dist/cjs/messages.js +5 -0
  4. package/dist/cjs/state/hooks/use-ai-summary/ai-summary-service/index.js +37 -26
  5. package/dist/cjs/utils/analytics/analytics.js +1 -1
  6. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +1 -1
  7. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +11 -5
  8. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +6 -1
  9. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +54 -0
  10. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +6 -7
  11. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +6 -0
  12. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +21 -11
  13. package/dist/cjs/view/LinkUrl/index.js +1 -1
  14. package/dist/cjs/view/common/ai-summary/index.js +23 -5
  15. package/dist/es2019/constants.js +2 -0
  16. package/dist/es2019/messages.js +5 -0
  17. package/dist/es2019/state/hooks/use-ai-summary/ai-summary-service/index.js +21 -14
  18. package/dist/es2019/utils/analytics/analytics.js +1 -1
  19. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +1 -1
  20. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +11 -10
  21. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +6 -1
  22. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +46 -0
  23. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +6 -7
  24. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +6 -0
  25. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +25 -14
  26. package/dist/es2019/view/LinkUrl/index.js +1 -1
  27. package/dist/es2019/view/common/ai-summary/index.js +19 -9
  28. package/dist/esm/constants.js +2 -0
  29. package/dist/esm/messages.js +5 -0
  30. package/dist/esm/state/hooks/use-ai-summary/ai-summary-service/index.js +37 -26
  31. package/dist/esm/utils/analytics/analytics.js +1 -1
  32. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +1 -1
  33. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +11 -5
  34. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +6 -1
  35. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +47 -0
  36. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +6 -7
  37. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +6 -0
  38. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +23 -13
  39. package/dist/esm/view/LinkUrl/index.js +1 -1
  40. package/dist/esm/view/common/ai-summary/index.js +22 -5
  41. package/dist/types/constants.d.ts +1 -0
  42. package/dist/types/messages.d.ts +1 -1
  43. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.d.ts +4 -0
  44. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -0
  45. package/dist/types/view/common/ai-summary/index.d.ts +3 -1
  46. package/dist/types-ts4.5/constants.d.ts +1 -0
  47. package/dist/types-ts4.5/messages.d.ts +1 -1
  48. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.d.ts +4 -0
  49. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -0
  50. package/dist/types-ts4.5/view/common/ai-summary/index.d.ts +3 -1
  51. package/package.json +5 -4
@@ -1,10 +1,21 @@
1
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
- var _templateObject;
3
1
  /** @jsx jsx */
4
2
  import React from 'react';
5
3
  import Markdown from 'markdown-to-jsx';
6
4
  import { css, jsx } from '@emotion/react';
7
- var AISummaryCSS = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n overflow-y: auto;\n font-size: 0.75rem;\n line-height: 1rem;\n word-wrap: break-word;\n white-space: normal;\n"])));
5
+ import AIStateIndicator from '../../FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator';
6
+ var AITooltipIcon = function AITooltipIcon() {
7
+ return jsx(AIStateIndicator, {
8
+ appearance: "icon-only",
9
+ state: "done",
10
+ testId: "ai-tooltip"
11
+ });
12
+ };
13
+ var AISummaryCSS = css({
14
+ fontSize: '0.75rem',
15
+ lineHeight: '1rem',
16
+ wordWrap: 'break-word',
17
+ whiteSpace: 'normal'
18
+ });
8
19
  /**
9
20
  * A component to render a response from AI in markdown text.
10
21
  * @internal
@@ -13,6 +24,9 @@ var AISummaryCSS = css(_templateObject || (_templateObject = _taggedTemplateLite
13
24
 
14
25
  var AISummary = function AISummary(_ref) {
15
26
  var content = _ref.content,
27
+ _ref$showIcon = _ref.showIcon,
28
+ showIcon = _ref$showIcon === void 0 ? false : _ref$showIcon,
29
+ iconComponent = _ref.iconComponent,
16
30
  overrideCss = _ref.overrideCss,
17
31
  _ref$testId = _ref.testId,
18
32
  testId = _ref$testId === void 0 ? 'ai-summary' : _ref$testId;
@@ -22,9 +36,12 @@ var AISummary = function AISummary(_ref) {
22
36
  return jsx(Markdown, {
23
37
  "data-testid": testId,
24
38
  css: [AISummaryCSS, overrideCss],
25
- children: content,
39
+ children: showIcon ? "".concat(content, " <Icon />") : content,
26
40
  options: {
27
- forceWrapper: true
41
+ forceWrapper: true,
42
+ overrides: {
43
+ Icon: iconComponent !== null && iconComponent !== void 0 ? iconComponent : AITooltipIcon
44
+ }
28
45
  }
29
46
  });
30
47
  };
@@ -1,6 +1,7 @@
1
1
  export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atlassian.com/confluence-cloud/docs/insert-links-and-anchors/#Smart-links";
2
2
  export declare const CONTENT_URL_3P_ACCOUNT_AUTH = "https://support.atlassian.com/confluence-cloud/docs/what-data-is-sent-and-received-when-pasting-a-smart-link/";
3
3
  export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
4
+ export declare const CONTENT_URL_AI_TROUBLESHOOTING = "https://support.atlassian.com/organization-administration/docs/troubleshooting-for-atlassian-intelligence/";
4
5
  /**
5
6
  * The alignment of Flexible UI component.
6
7
  */
@@ -1,6 +1,6 @@
1
1
  import { MessageDescriptor } from 'react-intl-next';
2
2
  export type RequestAccessMessageKey = 'click_to_join' | 'click_to_join_description' | 'forbidden_description' | 'request_access' | 'request_access_description' | 'request_access_pending' | 'request_access_pending_title' | 'request_access_pending_description' | 'request_denied_description' | 'default_no_access_title' | 'direct_access_title' | 'direct_access_description' | 'direct_access' | 'access_exists_description' | 'not_found_description' | 'not_found_title';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_info' | 'ai_summarizing' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
3
+ export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
4
4
  type Messages = {
5
5
  [K in MessageKey]: MessageDescriptor;
6
6
  };
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIStateIndicatorProps } from './types';
3
+ declare const AIStateError: React.FC<Partial<AIStateIndicatorProps>>;
4
+ export default AIStateError;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import type { XCSS } from '@atlaskit/primitives';
2
3
  import type { TooltipProps } from '@atlaskit/tooltip';
3
4
  import type { AIState } from '../types';
4
5
  export type AIStateAppearance = 'default' | 'icon-only';
@@ -15,4 +16,5 @@ export type AIIndicatorContainerProps = {
15
16
  export type AIIndicatorTooltipProps = {
16
17
  content: TooltipProps['content'];
17
18
  trigger: React.ReactNode;
19
+ xcss?: XCSS;
18
20
  };
@@ -1,9 +1,11 @@
1
1
  /** @jsx jsx */
2
2
  import React from 'react';
3
+ import { type MarkdownToJSX } from 'markdown-to-jsx';
3
4
  import { SerializedStyles } from '@emotion/react';
4
5
  type AISummaryProps = {
5
6
  content?: string;
6
- showAIIcon?: boolean;
7
+ showIcon?: boolean;
8
+ iconComponent?: MarkdownToJSX.Override;
7
9
  overrideCss?: SerializedStyles;
8
10
  /**
9
11
  * appears as a data attribute `data-testid` in the rendered code,
@@ -1,6 +1,7 @@
1
1
  export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atlassian.com/confluence-cloud/docs/insert-links-and-anchors/#Smart-links";
2
2
  export declare const CONTENT_URL_3P_ACCOUNT_AUTH = "https://support.atlassian.com/confluence-cloud/docs/what-data-is-sent-and-received-when-pasting-a-smart-link/";
3
3
  export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
4
+ export declare const CONTENT_URL_AI_TROUBLESHOOTING = "https://support.atlassian.com/organization-administration/docs/troubleshooting-for-atlassian-intelligence/";
4
5
  /**
5
6
  * The alignment of Flexible UI component.
6
7
  */
@@ -1,6 +1,6 @@
1
1
  import { MessageDescriptor } from 'react-intl-next';
2
2
  export type RequestAccessMessageKey = 'click_to_join' | 'click_to_join_description' | 'forbidden_description' | 'request_access' | 'request_access_description' | 'request_access_pending' | 'request_access_pending_title' | 'request_access_pending_description' | 'request_denied_description' | 'default_no_access_title' | 'direct_access_title' | 'direct_access_description' | 'direct_access' | 'access_exists_description' | 'not_found_description' | 'not_found_title';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_info' | 'ai_summarizing' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
3
+ export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
4
4
  type Messages = {
5
5
  [K in MessageKey]: MessageDescriptor;
6
6
  };
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIStateIndicatorProps } from './types';
3
+ declare const AIStateError: React.FC<Partial<AIStateIndicatorProps>>;
4
+ export default AIStateError;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import type { XCSS } from '@atlaskit/primitives';
2
3
  import type { TooltipProps } from '@atlaskit/tooltip';
3
4
  import type { AIState } from '../types';
4
5
  export type AIStateAppearance = 'default' | 'icon-only';
@@ -15,4 +16,5 @@ export type AIIndicatorContainerProps = {
15
16
  export type AIIndicatorTooltipProps = {
16
17
  content: TooltipProps['content'];
17
18
  trigger: React.ReactNode;
19
+ xcss?: XCSS;
18
20
  };
@@ -1,9 +1,11 @@
1
1
  /** @jsx jsx */
2
2
  import React from 'react';
3
+ import { type MarkdownToJSX } from 'markdown-to-jsx';
3
4
  import { SerializedStyles } from '@emotion/react';
4
5
  type AISummaryProps = {
5
6
  content?: string;
6
- showAIIcon?: boolean;
7
+ showIcon?: boolean;
8
+ iconComponent?: MarkdownToJSX.Override;
7
9
  overrideCss?: SerializedStyles;
8
10
  /**
9
11
  * appears as a data attribute `data-testid` in the rendered code,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.48.4",
3
+ "version": "26.48.6",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -31,7 +31,7 @@
31
31
  "@atlaskit/avatar-group": "^9.5.0",
32
32
  "@atlaskit/badge": "^15.2.0",
33
33
  "@atlaskit/button": "^17.6.0",
34
- "@atlaskit/dropdown-menu": "^12.5.0",
34
+ "@atlaskit/dropdown-menu": "^12.6.0",
35
35
  "@atlaskit/icon": "^22.1.0",
36
36
  "@atlaskit/icon-file-type": "^6.4.0",
37
37
  "@atlaskit/icon-object": "^6.3.0",
@@ -47,8 +47,8 @@
47
47
  "@atlaskit/modal-dialog": "^12.10.0",
48
48
  "@atlaskit/outbound-auth-flow-client": "^3.4.0",
49
49
  "@atlaskit/platform-feature-flags": "^0.2.1",
50
- "@atlaskit/popup": "^1.12.0",
51
- "@atlaskit/primitives": "^3.1.0",
50
+ "@atlaskit/popup": "^1.13.0",
51
+ "@atlaskit/primitives": "^3.2.0",
52
52
  "@atlaskit/spinner": "^16.0.0",
53
53
  "@atlaskit/theme": "^12.6.0",
54
54
  "@atlaskit/tokens": "^1.38.0",
@@ -102,6 +102,7 @@
102
102
  "fetch-mock": "^8.0.0",
103
103
  "jest-emotion": "^10.0.32",
104
104
  "jest-extended": "^0.11.2",
105
+ "jest-fetch-mock": "^3.0.3",
105
106
  "jsdom": "^17.0.0",
106
107
  "lorem-ipsum": "^1.0.6",
107
108
  "react": "^16.8.0",