diff --git a/src-docs/src/views/inline_edit/inline_edit_example.js b/src-docs/src/views/inline_edit/inline_edit_example.js index 8e4dde90c6b..4273ad6b4fe 100644 --- a/src-docs/src/views/inline_edit/inline_edit_example.js +++ b/src-docs/src/views/inline_edit/inline_edit_example.js @@ -11,17 +11,58 @@ import { EuiInlineEditTitle, } from '../../../../src'; +import { inlineEditTextConfig, inlineEditTitleConfig } from './playground'; + import InlineEditText from './inline_edit_text'; const inlineEditTextSource = require('!!raw-loader!./inline_edit_text'); +const inlineEditTextSnippet = ``; import InlineEditTitle from './inline_edit_title'; const inlineEditTitleSource = require('!!raw-loader!./inline_edit_title'); +const inlineEditTitleSnippet = ``; import InlineEditModeProps from './inline_edit_mode_props'; const inlineEditModePropsSource = require('!!raw-loader!./inline_edit_mode_props'); +const inlineEditModePropsSnippet = ``; import InlineEditSave from './inline_edit_save'; const inlineEditSaveSource = require('!!raw-loader!././inline_edit_save'); +const inlineEditModeSaveSnippet = ` { + localStorage.setItem('inlineEditValue', newInlineEditValue); + }} +/>`; import InlineEditValidation from './inline_edit_validation'; const inlineEditValidationSource = require('!!raw-loader!././inline_edit_validation'); @@ -60,6 +101,8 @@ export const InlineEditExample = { ], demo: , props: { EuiInlineEditText }, + snippet: inlineEditTextSnippet, + playground: inlineEditTextConfig, }, { title: 'Display and edit headings and titles', @@ -80,6 +123,8 @@ export const InlineEditExample = { ], demo: , props: { EuiInlineEditTitle }, + snippet: inlineEditTitleSnippet, + playground: inlineEditTitleConfig, }, { title: 'Saving edited text', @@ -98,6 +143,7 @@ export const InlineEditExample = { }, ], demo: , + snippet: inlineEditModeSaveSnippet, }, { title: 'Validating edited text', @@ -187,6 +233,7 @@ export const InlineEditExample = { }, ], demo: , + snippet: inlineEditModePropsSnippet, }, ], }; diff --git a/src-docs/src/views/inline_edit/playground.js b/src-docs/src/views/inline_edit/playground.js new file mode 100644 index 00000000000..7d7290905d4 --- /dev/null +++ b/src-docs/src/views/inline_edit/playground.js @@ -0,0 +1,103 @@ +import { PropTypes } from 'react-view'; +import { + EuiInlineEditText, + EuiInlineEditTitle, +} from '../../../../src/components'; +import { + propUtilityForPlayground, + dummyFunction, + simulateFunction, +} from '../../services/playground'; + +const setCommonPropsToUse = (propsToUse) => { + propsToUse.inputAriaLabel = { + ...propsToUse.inputAriaLabel, + value: 'Edit text inline', + type: PropTypes.String, + }; + + propsToUse.isLoading = { + type: PropTypes.Boolean, + }; + + propsToUse.isInvalid = { + type: PropTypes.Boolean, + }; + + propsToUse.startWithEditOpen = { + type: PropTypes.Boolean, + }; + + propsToUse.onSave = simulateFunction(propsToUse.onSave); +}; + +export const inlineEditTextConfig = () => { + const docgenInfo = Array.isArray(EuiInlineEditText.__docgenInfo) + ? EuiInlineEditText.__docgenInfo[0] + : EuiInlineEditText.__docgenInfo; + const propsToUse = propUtilityForPlayground(docgenInfo.props); + + propsToUse.defaultValue = { + ...propsToUse.defaultValue, + value: 'Hello! You are editing text content!', + type: PropTypes.String, + }; + + setCommonPropsToUse(propsToUse); + + return { + config: { + componentName: 'EuiInlineEditText', + props: propsToUse, + scope: { + EuiInlineEditText, + }, + imports: { + '@elastic/eui': { + named: ['EuiInlineEditText'], + }, + }, + customProps: { + onSave: dummyFunction, + }, + }, + }; +}; + +export const inlineEditTitleConfig = () => { + const docgenInfo = Array.isArray(EuiInlineEditTitle.__docgenInfo) + ? EuiInlineEditTitle.__docgenInfo[0] + : EuiInlineEditTitle.__docgenInfo; + const propsToUse = propUtilityForPlayground(docgenInfo.props); + + propsToUse.defaultValue = { + ...propsToUse.defaultValue, + value: 'Hello! You are editing a title!', + type: PropTypes.String, + }; + + propsToUse.heading = { + ...propsToUse.heading, + value: 'h4', + }; + + setCommonPropsToUse(propsToUse); + + return { + config: { + componentName: 'EuiInlineEditTitle', + props: propsToUse, + scope: { + EuiInlineEditTitle, + }, + imports: { + '@elastic/eui': { + named: ['EuiInlineEditTitle'], + }, + }, + customProps: { + onSave: dummyFunction, + }, + }, + }; +}; diff --git a/src/components/inline_edit/inline_edit_title.tsx b/src/components/inline_edit/inline_edit_title.tsx index 04de2ae2056..6f9d3d0b1d4 100644 --- a/src/components/inline_edit/inline_edit_title.tsx +++ b/src/components/inline_edit/inline_edit_title.tsx @@ -18,7 +18,7 @@ import { import { useEuiTheme } from '../../services'; import { euiInlineEditTitleStyles } from './inline_edit_title.styles'; -export const HEADINGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const; +export const HEADINGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span'] as const; type Heading = typeof HEADINGS[number]; export type EuiInlineEditTitleProps = EuiInlineEditCommonProps & { @@ -27,7 +27,8 @@ export type EuiInlineEditTitleProps = EuiInlineEditCommonProps & { */ size?: EuiTitleSize; /** - * Level of heading to be used for the title + * Level of heading to be used for the title. + * Use `span` for text that is not semantically a heading, but should still visually appear as a title. */ heading: Heading; };