diff --git a/packages/shared-ux/markdown/impl/__snapshots__/markdown.test.tsx.snap b/packages/shared-ux/markdown/impl/__snapshots__/markdown.test.tsx.snap
deleted file mode 100644
index 08642cface949f..00000000000000
--- a/packages/shared-ux/markdown/impl/__snapshots__/markdown.test.tsx.snap
+++ /dev/null
@@ -1,247 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`shared ux markdown component renders for editor 1`] = `
-
-`;
diff --git a/packages/shared-ux/markdown/impl/jest.config.js b/packages/shared-ux/markdown/impl/jest.config.js
index 07e2cf20d2fc35..b3237d6e5f6ffd 100644
--- a/packages/shared-ux/markdown/impl/jest.config.js
+++ b/packages/shared-ux/markdown/impl/jest.config.js
@@ -10,4 +10,5 @@ module.exports = {
preset: '@kbn/test',
rootDir: '../../../..',
roots: ['/packages/shared-ux/markdown/impl'],
+ setupFilesAfterEnv: ['/packages/shared-ux/markdown/impl/setup_tests.ts'],
};
diff --git a/packages/shared-ux/markdown/impl/markdown.test.tsx b/packages/shared-ux/markdown/impl/markdown.test.tsx
index 3726f8b3378d91..9a52e30955254b 100644
--- a/packages/shared-ux/markdown/impl/markdown.test.tsx
+++ b/packages/shared-ux/markdown/impl/markdown.test.tsx
@@ -8,24 +8,29 @@
import React from 'react';
import { Markdown } from './markdown';
-import { render } from 'enzyme';
+import { render, screen } from '@testing-library/react';
describe('shared ux markdown component', () => {
- it('renders for editor', () => {
- const component = render();
- expect(component).toMatchSnapshot();
+ it('renders markdown editor by default', () => {
+ render();
+ expect(screen.getByTestId('euiMarkdownEditorToolbar')).toBeInTheDocument();
+ });
+
+ it('renders markdown editor with tooltip action button when the prop `enableTooltipSupport` is true', () => {
+ render();
+
+ expect(screen.getByLabelText('Tooltip', { selector: 'button' })).toBeInTheDocument();
});
it('renders for displaying a readonly message', () => {
- const component = render();
- expect(component.text()).toContain('error message');
+ render();
+ expect(screen.queryByTestId('euiMarkdownEditorToolbar')).not.toBeInTheDocument();
+ expect(screen.getByText(/error message/i)).toBeInTheDocument();
});
it('will not render EuiMarkdownFormat when readOnly false and markdownContent specified', () => {
const exampleMarkdownContent = 'error';
- const component = render(
-
- );
- expect(component.has('EuiMarkdownEditor')).toBeTruthy();
+ render();
+ expect(screen.getByTestId('euiMarkdownEditorToolbar')).toBeInTheDocument();
});
});
diff --git a/packages/shared-ux/markdown/impl/markdown.tsx b/packages/shared-ux/markdown/impl/markdown.tsx
index f1f93eb1a9a603..09189a226821f4 100644
--- a/packages/shared-ux/markdown/impl/markdown.tsx
+++ b/packages/shared-ux/markdown/impl/markdown.tsx
@@ -11,18 +11,29 @@ import {
EuiMarkdownEditor,
EuiMarkdownEditorProps,
EuiMarkdownFormat,
- getDefaultEuiMarkdownProcessingPlugins,
+ euiMarkdownLinkValidator,
+ getDefaultEuiMarkdownPlugins,
} from '@elastic/eui';
import React, { useState } from 'react';
+import { useEffect } from 'react';
export type MarkdownProps = Partial<
Omit
> & {
/**
* @param readOnly is needed to differentiate where markdown is used as a presentation of error messages
- * This was previous the MarkdownSimple component
+ * This was previous the MarkdownSimple component, it's default value is false
*/
- readOnly: boolean;
+ readOnly?: boolean;
+ enableTooltipSupport?: boolean;
+ /**
+ * allow opt in to default EUI link validation behavior, see {@link https://eui.elastic.co/#/editors-syntax/markdown-plugins#link-validation-security}
+ */
+ validateLinks?: boolean;
+ /**
+ * provides a way to signal to a parent component that the component rendered successfully
+ */
+ onRender?: () => void;
defaultValue?: string;
markdownContent?: string;
ariaLabelContent?: string;
@@ -35,20 +46,40 @@ export type MarkdownProps = Partial<
export const Markdown = ({
ariaLabelContent,
- readOnly,
markdownContent,
children,
+ className,
+ onRender,
openLinksInNewTab = true,
defaultValue = '',
placeholder = '',
height = 'full',
+ readOnly = false,
+ enableTooltipSupport = false,
+ validateLinks = false,
+ ...restProps
}: MarkdownProps) => {
const [value, setValue] = useState(defaultValue);
+ useEffect(() => {
+ // onRender will be called after each render to signal, that we are done with rendering.
+ onRender?.();
+ }, [onRender]);
+
+ const { parsingPlugins, processingPlugins, uiPlugins } = getDefaultEuiMarkdownPlugins({
+ exclude: enableTooltipSupport ? undefined : ['tooltip'],
+ });
+
// openLinksInNewTab functionality from https://codesandbox.io/s/relaxed-yalow-hy69r4?file=/demo.js:482-645
- const processingPlugins = getDefaultEuiMarkdownProcessingPlugins();
processingPlugins[1][1].components.a = (props) => ;
+ const _parsingPlugins = validateLinks
+ ? parsingPlugins
+ : // @ts-expect-error
+ parsingPlugins.filter(([plugin]) => {
+ return plugin !== euiMarkdownLinkValidator;
+ });
+
// Render EuiMarkdownFormat when readOnly set to true
if (readOnly) {
if (!children && !markdownContent) {
@@ -56,8 +87,11 @@ export const Markdown = ({
}
return (
{children ?? markdownContent!}
@@ -67,12 +101,16 @@ export const Markdown = ({
// Otherwise render the Markdown Editor if readOnly false
return (
);
};
diff --git a/packages/shared-ux/markdown/impl/setup_tests.ts b/packages/shared-ux/markdown/impl/setup_tests.ts
new file mode 100644
index 00000000000000..8d1acb92329341
--- /dev/null
+++ b/packages/shared-ux/markdown/impl/setup_tests.ts
@@ -0,0 +1,10 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+// eslint-disable-next-line import/no-extraneous-dependencies
+import '@testing-library/jest-dom';
diff --git a/src/plugins/controls/public/control_group/component/control_error_component.tsx b/src/plugins/controls/public/control_group/component/control_error_component.tsx
index 6cdd1b5fc1fffe..1b7a893c30c075 100644
--- a/src/plugins/controls/public/control_group/component/control_error_component.tsx
+++ b/src/plugins/controls/public/control_group/component/control_error_component.tsx
@@ -10,7 +10,7 @@ import React, { useState } from 'react';
import { EuiButtonEmpty, EuiPopover } from '@elastic/eui';
import { FormattedMessage, I18nProvider } from '@kbn/i18n-react';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
interface ControlErrorProps {
error: Error | string;
@@ -45,11 +45,9 @@ export const ControlError = ({ error }: ControlErrorProps) => {
className="errorEmbeddableCompact__popover"
closePopover={() => setPopoverOpen(false)}
>
-
+
+ {errorMessage}
+
);
diff --git a/src/plugins/controls/tsconfig.json b/src/plugins/controls/tsconfig.json
index 2567c8e655dfd0..a8c3ed93e8dfd0 100644
--- a/src/plugins/controls/tsconfig.json
+++ b/src/plugins/controls/tsconfig.json
@@ -38,6 +38,7 @@
"@kbn/core-mount-utils-browser",
"@kbn/react-kibana-mount",
"@kbn/react-kibana-context-theme",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
index eb69c5910e3f6c..0b8d6335a99c54 100644
--- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
+++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx
@@ -8,7 +8,7 @@
import React, { useCallback, useMemo, useState } from 'react';
import { i18n } from '@kbn/i18n';
import { toMountPoint } from '@kbn/react-kibana-mount';
-import { MarkdownSimple } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import type { DataView } from '@kbn/data-views-plugin/public';
import { SortDirection } from '@kbn/data-plugin/public';
import type { DataTableRecord } from '@kbn/discover-utils/types';
@@ -105,7 +105,7 @@ export function useContextAppFetch({
setState(createError('anchorStatus', FailureReason.UNKNOWN, error));
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message}, {
+ text: toMountPoint({error.message}, {
theme: services.core.theme,
i18n: services.core.i18n,
}),
@@ -160,7 +160,7 @@ export function useContextAppFetch({
setState(createError(statusKey, FailureReason.UNKNOWN, error));
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message}, {
+ text: toMountPoint({error.message}, {
theme: services.core.theme,
i18n: services.core.i18n,
}),
diff --git a/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx b/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
index fc732ad08c1249..912ab14b908530 100644
--- a/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
+++ b/src/plugins/discover/public/application/view_alert/view_alert_utils.tsx
@@ -16,7 +16,7 @@ import type { Rule } from '@kbn/alerting-plugin/common';
import type { RuleTypeParams } from '@kbn/alerting-plugin/common';
import { ISearchSource, SerializedSearchSourceFields, getTime } from '@kbn/data-plugin/common';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
-import { MarkdownSimple } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { toMountPoint } from '@kbn/react-kibana-mount';
import { Filter } from '@kbn/es-query';
import { DiscoverAppLocatorParams } from '../../../common/app_locator';
@@ -84,7 +84,7 @@ export const getAlertUtils = (
});
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message}, {
+ text: toMountPoint({error.message}, {
theme: core.theme,
i18n: core.i18n,
}),
@@ -107,7 +107,7 @@ export const getAlertUtils = (
});
toastNotifications.addDanger({
title: errorTitle,
- text: toMountPoint({error.message}, {
+ text: toMountPoint(, {
theme: core.theme,
i18n: core.i18n,
}),
diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json
index 24417d17f70d4d..683260dc4abb80 100644
--- a/src/plugins/discover/tsconfig.json
+++ b/src/plugins/discover/tsconfig.json
@@ -83,7 +83,8 @@
"@kbn/deeplinks-observability",
"@kbn/esql-utils",
"@kbn/managed-content-badge",
- "@kbn/deeplinks-analytics"
+ "@kbn/deeplinks-analytics",
+ "@kbn/shared-ux-markdown"
],
"exclude": ["target/**/*"]
}
diff --git a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx
index 49abaee78d6441..4f53dca9003ddb 100644
--- a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx
+++ b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx
@@ -32,11 +32,23 @@ test('ErrorEmbeddable renders an embeddable with markdown message', async () =>
await waitFor(() => getByTestId('errorMessageMarkdown')); // wait for lazy markdown component
expect(getByText(/some link/i)).toMatchInlineSnapshot(`
some link
+
+ External link
+
+
+ (opens in a new tab or window)
+
`);
});
diff --git a/src/plugins/expression_error/public/components/error/error.tsx b/src/plugins/expression_error/public/components/error/error.tsx
index 4fe51aede4a644..5847f93b9aa01e 100644
--- a/src/plugins/expression_error/public/components/error/error.tsx
+++ b/src/plugins/expression_error/public/components/error/error.tsx
@@ -9,7 +9,7 @@
import React, { FC } from 'react';
import { EuiButtonIcon, EuiCallOut } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { ShowDebugging } from './show_debugging';
export interface Props {
@@ -47,7 +47,7 @@ export const Error: FC = ({ payload, onClose }) => {
{message ? strings.getDescription() : ''}
{message && (
-
+ {message}
)}
diff --git a/src/plugins/expression_error/tsconfig.json b/src/plugins/expression_error/tsconfig.json
index 1cda452adcb70e..d9fc54315dc431 100644
--- a/src/plugins/expression_error/tsconfig.json
+++ b/src/plugins/expression_error/tsconfig.json
@@ -16,6 +16,7 @@
"@kbn/i18n",
"@kbn/kibana-react-plugin",
"@kbn/i18n-react",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/kibana_react/public/markdown/markdown.test.tsx b/src/plugins/kibana_react/public/markdown/markdown.test.tsx
index 1657fa5e3ba588..1dda072be9e5fd 100644
--- a/src/plugins/kibana_react/public/markdown/markdown.test.tsx
+++ b/src/plugins/kibana_react/public/markdown/markdown.test.tsx
@@ -51,19 +51,19 @@ describe('props', () => {
});
test('openLinksInNewTab', () => {
- const component = shallow();
+ const component = shallow();
expect(component).toMatchSnapshot();
});
test('whiteListedRules', () => {
const component = shallow(
-
+
);
expect(component).toMatchSnapshot();
});
test('should update markdown when openLinksInNewTab prop change', () => {
- const component = shallow();
+ const component = shallow();
expect(component.render().find('a').prop('target')).not.toBe('_blank');
component.setProps({ openLinksInNewTab: true });
expect(component.render().find('a').prop('target')).toBe('_blank');
@@ -72,7 +72,7 @@ describe('props', () => {
test('should update markdown when whiteListedRules prop change', () => {
const md = '*emphasis* `backticks`';
const component = shallow(
-
+
);
expect(component.render().find('em')).toHaveLength(1);
expect(component.render().find('code')).toHaveLength(1);
diff --git a/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx b/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx
index 3bd45d7eeff344..92f7a0045003bf 100644
--- a/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx
+++ b/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx
@@ -10,7 +10,7 @@ import { EuiButtonEmpty, EuiEmptyPrompt, EuiText } from '@elastic/eui';
import React, { useEffect, useMemo, useState } from 'react';
import { ErrorLike } from '@kbn/expressions-plugin/common';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { renderSearchError } from '@kbn/search-errors';
import { usePanelTitle } from '@kbn/presentation-publishing';
@@ -82,11 +82,9 @@ export const PresentationPanelError = ({
body={
searchErrorDisplay?.body ?? (
-
+
+ {error.message}
+
)
}
diff --git a/src/plugins/presentation_panel/tsconfig.json b/src/plugins/presentation_panel/tsconfig.json
index 37f16bd2b84d9c..9b867c0ada43cf 100644
--- a/src/plugins/presentation_panel/tsconfig.json
+++ b/src/plugins/presentation_panel/tsconfig.json
@@ -27,7 +27,8 @@
"@kbn/usage-collection-plugin",
"@kbn/data-views-plugin",
"@kbn/panel-loader",
- "@kbn/search-errors"
+ "@kbn/search-errors",
+ "@kbn/shared-ux-markdown"
],
"exclude": ["target/**/*"]
}
diff --git a/src/plugins/vis_type_markdown/kibana.jsonc b/src/plugins/vis_type_markdown/kibana.jsonc
index 476dcc0605ad40..d3d1d3bd9f29bc 100644
--- a/src/plugins/vis_type_markdown/kibana.jsonc
+++ b/src/plugins/vis_type_markdown/kibana.jsonc
@@ -13,7 +13,6 @@
],
"requiredBundles": [
"expressions",
- "kibanaReact",
"visDefaultEditor",
"visualizations"
]
diff --git a/src/plugins/vis_type_markdown/public/markdown_vis_controller.test.tsx b/src/plugins/vis_type_markdown/public/markdown_vis_controller.test.tsx
index 963f3b0ecbbb26..04f86e815e8411 100644
--- a/src/plugins/vis_type_markdown/public/markdown_vis_controller.test.tsx
+++ b/src/plugins/vis_type_markdown/public/markdown_vis_controller.test.tsx
@@ -29,7 +29,9 @@ describe('markdown vis controller', () => {
expect(getByText('markdown')).toMatchInlineSnapshot(`
markdown
@@ -53,7 +55,8 @@ describe('markdown vis controller', () => {
expect(getByText(/testing/i)).toMatchInlineSnapshot(`
- Testing <a>html</a>
+ Testing
+ html
`);
});
diff --git a/src/plugins/vis_type_markdown/public/markdown_vis_controller.tsx b/src/plugins/vis_type_markdown/public/markdown_vis_controller.tsx
index 60df18d60a15e1..7c0b44d24860d4 100644
--- a/src/plugins/vis_type_markdown/public/markdown_vis_controller.tsx
+++ b/src/plugins/vis_type_markdown/public/markdown_vis_controller.tsx
@@ -7,7 +7,7 @@
*/
import React, { useEffect } from 'react';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { MarkdownVisParams } from './types';
import './markdown_vis.scss';
@@ -28,8 +28,9 @@ const MarkdownVisComponent = ({
);
diff --git a/src/plugins/vis_type_markdown/tsconfig.json b/src/plugins/vis_type_markdown/tsconfig.json
index 73c6d160696ac9..833dc7404cc0ff 100644
--- a/src/plugins/vis_type_markdown/tsconfig.json
+++ b/src/plugins/vis_type_markdown/tsconfig.json
@@ -12,11 +12,11 @@
"@kbn/core",
"@kbn/expressions-plugin",
"@kbn/visualizations-plugin",
- "@kbn/kibana-react-plugin",
"@kbn/vis-default-editor-plugin",
"@kbn/i18n",
"@kbn/i18n-react",
"@kbn/config-schema",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/vis.js b/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/vis.js
index 0701f9498c793e..2ad505c2590822 100644
--- a/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/vis.js
+++ b/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/vis.js
@@ -11,7 +11,7 @@ import React from 'react';
import classNames from 'classnames';
import { get } from 'lodash';
import { ClassNames } from '@emotion/react';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { ErrorComponent } from '../../error';
import { replaceVars } from '../../lib/replace_vars';
@@ -79,9 +79,11 @@ function MarkdownVisualization(props) {
{!markdownError && (
+ readOnly
+ >
+ {markdownSource}
+
)}
diff --git a/src/plugins/vis_types/timeseries/public/application/components/vis_types/timeseries/vis.js b/src/plugins/vis_types/timeseries/public/application/components/vis_types/timeseries/vis.js
index 411bb9e41b5e48..36b62cc6b4f042 100644
--- a/src/plugins/vis_types/timeseries/public/application/components/vis_types/timeseries/vis.js
+++ b/src/plugins/vis_types/timeseries/public/application/components/vis_types/timeseries/vis.js
@@ -18,7 +18,7 @@ import { createTickFormatter } from '../../lib/tick_formatter';
import { createFieldFormatter } from '../../lib/create_field_formatter';
import { checkIfSeriesHaveSameFormatters } from '../../lib/check_if_series_have_same_formatters';
import { TimeSeries } from '../../../visualizations/views/timeseries';
-import { MarkdownSimple } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { LEGACY_TIME_AXIS } from '@kbn/charts-plugin/common';
import { replaceVars } from '../../lib/replace_vars';
import { getInterval } from '../../lib/get_interval';
@@ -125,7 +125,7 @@ class TimeseriesVisualization extends Component {
this.notificationReason = this.showToastNotification.reason;
this.notification = toastNotifications.addDanger({
title: this.showToastNotification.title,
- text: {this.showToastNotification.reason},
+ text: {this.showToastNotification.reason},
});
}
diff --git a/src/plugins/vis_types/timeseries/tsconfig.json b/src/plugins/vis_types/timeseries/tsconfig.json
index aac74660e83775..fae5345527bcea 100644
--- a/src/plugins/vis_types/timeseries/tsconfig.json
+++ b/src/plugins/vis_types/timeseries/tsconfig.json
@@ -47,6 +47,7 @@
"@kbn/tinymath",
"@kbn/visualization-utils",
"@kbn/code-editor",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx b/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx
index f56afa234d65ef..49f9290bb69919 100644
--- a/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx
+++ b/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx
@@ -13,7 +13,8 @@ import { EventEmitter } from 'events';
import { i18n } from '@kbn/i18n';
import { FilterStateStore } from '@kbn/es-query';
-import { KibanaThemeProvider, MarkdownSimple, toMountPoint } from '@kbn/kibana-react-plugin/public';
+import { KibanaThemeProvider, toMountPoint } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { connectToQueryState } from '@kbn/data-plugin/public';
import { migrateLegacyQuery } from '../migrate_legacy_query';
import {
@@ -129,7 +130,7 @@ export const useVisualizeAppState = (
}),
text: toMountPoint(
- {error.message}
+ {error.message}
),
});
diff --git a/src/plugins/visualizations/tsconfig.json b/src/plugins/visualizations/tsconfig.json
index adeaf7ae280c23..491f3e29149156 100644
--- a/src/plugins/visualizations/tsconfig.json
+++ b/src/plugins/visualizations/tsconfig.json
@@ -69,7 +69,8 @@
"@kbn/chart-expressions-common",
"@kbn/shared-ux-utility",
"@kbn/managed-content-badge",
- "@kbn/presentation-publishing"
+ "@kbn/presentation-publishing",
+ "@kbn/shared-ux-markdown"
],
"exclude": [
"target/**/*",
diff --git a/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts b/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts
index 81ef54cad18314..d524fd23e0393b 100644
--- a/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts
+++ b/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts
@@ -39,10 +39,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(h1Txt).to.equal('Heading 1');
});
- it('should not render html in markdown as html', async function () {
- const expected = 'Heading 1\nInline HTML that should not be rendered as html
';
+ it('should not render html in markdown', async function () {
const actual = await PageObjects.visChart.getMarkdownText();
- expect(actual).to.equal(expected);
+ expect(actual).to.equal('Heading 1');
});
it('should auto apply changes if auto mode is turned on', async function () {
diff --git a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts
index 03f40c5b6ebcf4..052e33f29f4e8f 100644
--- a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts
+++ b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts
@@ -125,7 +125,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const embeddableError = await testSubjects.find('embeddableError');
const errorMessage = await embeddableError.findByTestSubject('errorMessageMarkdown');
expect(await errorMessage.getVisibleText()).to.equal(
- 'Expected AND, OR, end of input, whitespace but "n" found. this < is not : a valid > query ----------^'
+ 'Expected AND, OR, end of input, whitespace but "n" found.\nthis < is not : a valid > query\n----------^'
);
});
diff --git a/test/functional/apps/visualize/group6/_tsvb_markdown.ts b/test/functional/apps/visualize/group6/_tsvb_markdown.ts
index f015a0a0107483..7652bf875aadcd 100644
--- a/test/functional/apps/visualize/group6/_tsvb_markdown.ts
+++ b/test/functional/apps/visualize/group6/_tsvb_markdown.ts
@@ -80,7 +80,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
const html = 'hello world
';
await visualBuilder.enterMarkdown(html);
const markdownText = await visualBuilder.getMarkdownText();
- expect(markdownText).to.be(html);
+ expect(markdownText).to.be('');
});
it('markdown variables should be clickable', async () => {
diff --git a/x-pack/plugins/apm/public/components/fleet_integration/apm_agents/agent_instructions_accordion.tsx b/x-pack/plugins/apm/public/components/fleet_integration/apm_agents/agent_instructions_accordion.tsx
index 237b31219c820f..c5c8f533801cc6 100644
--- a/x-pack/plugins/apm/public/components/fleet_integration/apm_agents/agent_instructions_accordion.tsx
+++ b/x-pack/plugins/apm/public/components/fleet_integration/apm_agents/agent_instructions_accordion.tsx
@@ -17,7 +17,8 @@ import {
import { i18n } from '@kbn/i18n';
import React, { ComponentType } from 'react';
import styled from 'styled-components';
-import { Markdown, useKibana } from '@kbn/kibana-react-plugin/public';
+import { useKibana } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { AgentIcon } from '@kbn/custom-icons';
import {
AgentRuntimeAttachmentProps,
@@ -74,12 +75,9 @@ function AccordionButtonContent({
function InstructionsContent({ markdown }: { markdown: string }) {
return (
-
+
+ {markdown}
+
);
}
diff --git a/x-pack/plugins/apm/tsconfig.json b/x-pack/plugins/apm/tsconfig.json
index 4f708fa7fbb8e1..9089561dcbe581 100644
--- a/x-pack/plugins/apm/tsconfig.json
+++ b/x-pack/plugins/apm/tsconfig.json
@@ -111,6 +111,7 @@
"@kbn/shared-svg",
"@kbn/shared-ux-utility",
"@kbn/management-settings-components-field-row",
+ "@kbn/shared-ux-markdown",
],
"exclude": ["target/**/*"]
}
diff --git a/x-pack/plugins/banners/public/components/banner.tsx b/x-pack/plugins/banners/public/components/banner.tsx
index e89206ca5a61e1..e43a78d83328a8 100644
--- a/x-pack/plugins/banners/public/components/banner.tsx
+++ b/x-pack/plugins/banners/public/components/banner.tsx
@@ -6,7 +6,7 @@
*/
import React, { FC } from 'react';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { BannerConfiguration } from '../../common';
import './banner.scss';
@@ -26,7 +26,7 @@ export const Banner: FC = ({ bannerConfig }) => {
}}
>
-
+ {textContent}
);
diff --git a/x-pack/plugins/banners/tsconfig.json b/x-pack/plugins/banners/tsconfig.json
index e79f9107075f5a..019a4ebd7da883 100644
--- a/x-pack/plugins/banners/tsconfig.json
+++ b/x-pack/plugins/banners/tsconfig.json
@@ -11,6 +11,7 @@
"@kbn/licensing-plugin",
"@kbn/config-schema",
"@kbn/i18n",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx
index fd1e2415d05891..bb8bf638daa12b 100644
--- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx
+++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx
@@ -11,7 +11,7 @@ import { CoreTheme } from '@kbn/core/public';
import { Observable } from 'rxjs';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import { StartInitializer } from '../../plugin';
import { RendererStrings } from '../../../i18n';
import { Return as Config } from '../../functions/browser/markdown';
@@ -34,9 +34,11 @@ export const getMarkdownRenderer =
+ readOnly
+ >
+ {config.content}
+
,
domNode,
() => handlers.done()
diff --git a/x-pack/plugins/canvas/tsconfig.json b/x-pack/plugins/canvas/tsconfig.json
index a745398562f3af..008727a60bdba6 100644
--- a/x-pack/plugins/canvas/tsconfig.json
+++ b/x-pack/plugins/canvas/tsconfig.json
@@ -87,6 +87,7 @@
"@kbn/reporting-server",
"@kbn/reporting-export-types-pdf-common",
"@kbn/code-editor",
+ "@kbn/shared-ux-markdown",
],
"exclude": [
"target/**/*",
diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_help.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_help.tsx
index 6ea9b5ffa4823e..4bb885024bcbf0 100644
--- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_help.tsx
+++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/formula_help.tsx
@@ -7,7 +7,7 @@
import React from 'react';
import { i18n } from '@kbn/i18n';
-import { Markdown } from '@kbn/kibana-react-plugin/public';
+import { Markdown } from '@kbn/shared-ux-markdown';
import {
documentationMap,
tinymathFunctions,
@@ -43,7 +43,7 @@ function createNewSection(
<>
{getFunctionSignatureLabel(key, operationDefinitionMap, false)}
- {fnDescription ? : null}
+ {fnDescription ? {fnDescription} : null}
>
),
};
@@ -85,7 +85,7 @@ export function getDocumentationSections({
items: formulasSections.common.items.map(
({ label, description }: { label: string; description: string }) => ({
label,
- description: ,
+ description: {description},
})
),
});
@@ -154,7 +154,7 @@ export function getDocumentationSections({
const sections = {
groups: helpGroups,
- initialSection: ,
+ initialSection: {formulasSections.howTo},
};
return sections;
diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json
index 31b4cab2779c98..b6875ae3303ff8 100644
--- a/x-pack/plugins/lens/tsconfig.json
+++ b/x-pack/plugins/lens/tsconfig.json
@@ -111,7 +111,8 @@
"@kbn/sort-predicates",
"@kbn/presentation-publishing",
"@kbn/saved-objects-finder-plugin",
- "@kbn/unified-data-table"
+ "@kbn/unified-data-table",
+ "@kbn/shared-ux-markdown"
],
"exclude": ["target/**/*"]
}
diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts b/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts
index 726246776f2ec6..386d387d7ad6e6 100644
--- a/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts
+++ b/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts
@@ -136,7 +136,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const embeddableError = await testSubjects.find('embeddableError');
const errorMessage = await embeddableError.findByTestSubject('errorMessageMarkdown');
expect(await errorMessage.getVisibleText()).to.equal(
- 'Expected AND, OR, end of input, whitespace but "n" found. this < is not : a valid > query ----------^'
+ 'Expected AND, OR, end of input, whitespace but "n" found.\nthis < is not : a valid > query\n----------^'
);
});