@pie-lib/editable-html-tip-tap 2.1.10 → 2.2.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -75
- package/lib/__tests__/EditableHtml.test.js +831 -0
- package/lib/__tests__/EditableHtml.test.js.map +1 -0
- package/lib/__tests__/constants.test.js +21 -0
- package/lib/__tests__/constants.test.js.map +1 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js.map +1 -0
- package/lib/__tests__/extensions.test.js +209 -0
- package/lib/__tests__/extensions.test.js.map +1 -0
- package/lib/__tests__/index.test.js +250 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/size-utils.test.js.map +1 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/__tests__/theme.test.js.map +1 -0
- package/lib/components/EditableHtml.js +4 -2
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/AltDialog.test.js.map +1 -0
- package/lib/components/__tests__/CharacterPicker.test.js +455 -0
- package/lib/components/__tests__/CharacterPicker.test.js.map +1 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/CssIcon.test.js.map +1 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
- package/lib/components/__tests__/DragInTheBlank.test.js.map +1 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +1 -0
- package/lib/components/__tests__/ImageToolbar.test.js +185 -0
- package/lib/components/__tests__/ImageToolbar.test.js.map +1 -0
- package/lib/components/__tests__/InlineDropdown.test.js +839 -0
- package/lib/components/__tests__/InlineDropdown.test.js.map +1 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
- package/lib/components/__tests__/InsertImageHandler.test.js.map +1 -0
- package/lib/components/__tests__/MediaDialog.test.js +433 -0
- package/lib/components/__tests__/MediaDialog.test.js.map +1 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaToolbar.test.js.map +1 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MediaWrapper.test.js.map +1 -0
- package/lib/components/__tests__/MenuBar.test.js +502 -0
- package/lib/components/__tests__/MenuBar.test.js.map +1 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/RespArea.test.js.map +1 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TableIcons.test.js.map +1 -0
- package/lib/components/__tests__/TextAlign.test.js +209 -0
- package/lib/components/__tests__/TextAlign.test.js.map +1 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/TiptapContainer.test.js.map +1 -0
- package/lib/components/__tests__/characterUtils.test.js +178 -0
- package/lib/components/__tests__/characterUtils.test.js.map +1 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/choice.test.js.map +1 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/custom-popper.test.js.map +1 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/done-button.test.js.map +1 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/choice.js +3 -0
- package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
- package/lib/components/respArea/MathTemplated.js +2 -2
- package/lib/components/respArea/MathTemplated.js.map +1 -1
- package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
- package/lib/components/respArea/__tests__/MathTemplated.test.js.map +1 -0
- package/lib/extensions/__tests__/css.test.js +214 -0
- package/lib/extensions/__tests__/css.test.js.map +1 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +1 -0
- package/lib/extensions/__tests__/divNode.test.js +108 -0
- package/lib/extensions/__tests__/divNode.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
- package/lib/extensions/__tests__/extended-list-item.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table.test.js +200 -0
- package/lib/extensions/__tests__/extended-table.test.js.map +1 -0
- package/lib/extensions/__tests__/image-component.test.js +432 -0
- package/lib/extensions/__tests__/image-component.test.js.map +1 -0
- package/lib/extensions/__tests__/image.test.js +313 -0
- package/lib/extensions/__tests__/image.test.js.map +1 -0
- package/lib/extensions/__tests__/math.test.js +1399 -0
- package/lib/extensions/__tests__/math.test.js.map +1 -0
- package/lib/extensions/__tests__/media-node-view.test.js +307 -0
- package/lib/extensions/__tests__/media-node-view.test.js.map +1 -0
- package/lib/extensions/__tests__/media.test.js +292 -0
- package/lib/extensions/__tests__/media.test.js.map +1 -0
- package/lib/extensions/__tests__/responseArea.test.js +736 -0
- package/lib/extensions/__tests__/responseArea.test.js.map +1 -0
- package/lib/extensions/image-component.js +9 -6
- package/lib/extensions/image-component.js.map +1 -1
- package/lib/extensions/responseArea.js +7 -1
- package/lib/extensions/responseArea.js.map +1 -1
- package/lib/utils/__tests__/helper.test.js +107 -0
- package/lib/utils/__tests__/helper.test.js.map +1 -0
- package/lib/utils/__tests__/toolbar.test.js +38 -0
- package/lib/utils/__tests__/toolbar.test.js.map +1 -0
- package/package.json +7 -7
- package/src/components/EditableHtml.jsx +5 -3
- package/src/components/respArea/DragInTheBlank/__tests__/choice.test.jsx +72 -0
- package/src/components/respArea/DragInTheBlank/choice.jsx +3 -0
- package/src/components/respArea/MathTemplated.jsx +1 -1
- package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
- package/src/extensions/__tests__/image-component.test.jsx +1 -0
- package/src/extensions/__tests__/responseArea.test.js +57 -3
- package/src/extensions/image-component.jsx +8 -6
- package/src/extensions/responseArea.js +7 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditableHtml.test.js","names":["_react","_interopRequireDefault","require","_react2","_react3","_EditableHtml","_responseArea","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","EditorContent","_ref","editor","props","_objectWithoutProperties2","createElement","_extends2","useEditor","fn","config","mockEditor","getHTML","setEditable","commands","setContent","isActive","isFocused","useEditorState","__esModule","configure","TextStyleKit","CharacterCount","TableRow","ExtendedTableCell","ExtendedTableHeader","EnsureEmptyRootIsDiv","ExtendedListItem","EnsureListItemContentIsDiv","ExplicitConstructedResponseNode","DragInTheBlankNode","InlineDropdownNode","MathTemplatedNode","ResponseAreaExtension","MathNode","ImageUploadNode","Media","CSSMark","default","_ref2","children","requireActual","buildExtensions","describe","defaultProps","markup","onChange","onDone","disabled","beforeEach","clearAllMocks","it","_render","render","EditableHtml","container","expect","toBeInTheDocument","_render2","getByTestId","_asyncToGenerator2","_regenerator","mark","_callee","_render3","wrap","_context","prev","next","waitFor","stop","toolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","_render4","activePlugins","_render5","pluginProps","showParagraphs","separateParagraphs","_render6","responseAreaProps","type","options","_render7","_callee2","html","configureCall","inlineDropdownOptions","_context2","toHaveBeenCalled","calls","onInlineDropdownToolbarClose","toHaveBeenCalledTimes","toHaveBeenCalledWith","sizeProps","width","height","minHeight","maxHeight","minWidth","maxWidth","_render8","_render9","charactersLimit","imageSupport","add","_render0","_render1","maxImageWidth","maxImageHeight","languageCharactersProps","label","value","_render10","extraCSSRules","color","_render11","uploadSoundSupport","_render12","onKeyDown","_render13","_render14","disableImageAlignmentButtons","_callee3","editorRef","_context3","_callee4","_context4","callArg","toHaveProperty","_render15","undefined","_callee5","_render16","_context5","editorContent","_callee6","editorConfig","blurEditor","_context6","useFakeTimers","schema","_insertingImage","_toolbarOpened","onBlur","advanceTimersByTime","not","useRealTimers","_callee7","_context7","_callee8","_context8","_callee9","mockTransaction","_context9","isDone","onUpdate","transaction","_callee0","_context0","_callee1","_context1","_callee10","_context10","_callee11","_context11","toThrow"],"sources":["../../src/__tests__/EditableHtml.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, waitFor } from '@testing-library/react';\nimport { useEditor } from '@tiptap/react';\nimport { EditableHtml } from '../components/EditableHtml';\nimport { InlineDropdownNode } from '../extensions/responseArea';\n\n// Mock TipTap dependencies\njest.mock('@tiptap/react', () => ({\n EditorContent: ({ editor, ...props }) => <div data-testid=\"editor-content\" {...props} />,\n useEditor: jest.fn((config) => {\n const mockEditor = {\n getHTML: jest.fn(() => '<p>test content</p>'),\n setEditable: jest.fn(),\n commands: {\n setContent: jest.fn(),\n },\n isActive: jest.fn(() => false),\n isFocused: false,\n };\n return mockEditor;\n }),\n useEditorState: jest.fn(() => ({\n isFocused: false,\n })),\n}));\n\njest.mock('@tiptap/starter-kit', () => ({\n __esModule: true,\n default: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('@tiptap/extension-text-style', () => ({\n TextStyleKit: {},\n}));\n\njest.mock('@tiptap/extension-character-count', () => ({\n CharacterCount: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('@tiptap/extension-superscript', () => ({\n __esModule: true,\n default: {},\n}));\n\njest.mock('@tiptap/extension-subscript', () => ({\n __esModule: true,\n default: {},\n}));\n\njest.mock('@tiptap/extension-text-align', () => ({\n __esModule: true,\n default: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('@tiptap/extension-image', () => ({\n __esModule: true,\n default: {},\n}));\n\njest.mock('@tiptap/extension-table', () => ({\n __esModule: true,\n default: {},\n}));\n\njest.mock('@tiptap/extension-table-row', () => ({\n TableRow: {},\n}));\n\njest.mock('../extensions/extended-table-cell', () => ({\n ExtendedTableCell: {},\n ExtendedTableHeader: {},\n}));\n\njest.mock('../extensions/extended-table', () => ({\n __esModule: true,\n default: {},\n}));\n\njest.mock('../extensions/ensure-empty-root-div', () => ({\n EnsureEmptyRootIsDiv: {},\n}));\n\njest.mock('../extensions/extended-list-item', () => ({\n ExtendedListItem: {},\n}));\n\njest.mock('../extensions/ensure-list-item-content-is-div', () => ({\n EnsureListItemContentIsDiv: {},\n}));\n\njest.mock('../extensions/responseArea', () => ({\n ExplicitConstructedResponseNode: {\n configure: jest.fn(() => ({})),\n },\n DragInTheBlankNode: {\n configure: jest.fn(() => ({})),\n },\n InlineDropdownNode: {\n configure: jest.fn(() => ({})),\n },\n MathTemplatedNode: {\n configure: jest.fn(() => ({})),\n },\n ResponseAreaExtension: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('../extensions/math', () => ({\n MathNode: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('../extensions/image', () => ({\n ImageUploadNode: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('../extensions/media', () => ({\n Media: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('../extensions/css', () => ({\n CSSMark: {\n configure: jest.fn(() => ({})),\n },\n}));\n\njest.mock('../components/TiptapContainer', () => ({\n __esModule: true,\n default: ({ children }) => <div data-testid=\"editor-container\">{children}</div>,\n}));\n\njest.mock('../extensions', () => ({\n ...jest.requireActual('../extensions'),\n buildExtensions: jest.fn(() => []),\n}));\n\ndescribe('EditableHtml', () => {\n const defaultProps = {\n markup: '<p>Hello World</p>',\n onChange: jest.fn(),\n onDone: jest.fn(),\n disabled: false,\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it('renders without crashing', () => {\n const { container } = render(<EditableHtml {...defaultProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('renders editor container', () => {\n const { getByTestId } = render(<EditableHtml {...defaultProps} />);\n expect(getByTestId('editor-container')).toBeInTheDocument();\n });\n\n it('renders editor content when editor is initialized', async () => {\n const { getByTestId } = render(<EditableHtml {...defaultProps} />);\n await waitFor(() => {\n expect(getByTestId('editor-content')).toBeInTheDocument();\n });\n });\n\n it('accepts custom toolbar options', () => {\n const toolbarOpts = {\n position: 'top',\n alignment: 'center',\n alwaysVisible: true,\n showDone: false,\n doneOn: 'change',\n };\n const { container } = render(<EditableHtml {...defaultProps} toolbarOpts={toolbarOpts} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts custom active plugins', () => {\n const activePlugins = ['bold', 'italic', 'underline'];\n const { container } = render(<EditableHtml {...defaultProps} activePlugins={activePlugins} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts plugin props', () => {\n const pluginProps = {\n showParagraphs: { disabled: false },\n separateParagraphs: { disabled: false },\n };\n const { container } = render(<EditableHtml {...defaultProps} pluginProps={pluginProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts response area props', () => {\n const responseAreaProps = {\n type: 'explicit-constructed-response',\n options: {},\n };\n const { container } = render(<EditableHtml {...defaultProps} responseAreaProps={responseAreaProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('passes blur done behavior to inline dropdown toolbar close', async () => {\n const onChange = jest.fn();\n const onDone = jest.fn();\n const html = '<p>from inline dropdown close</p>';\n\n render(\n <EditableHtml\n {...defaultProps}\n markup=\"<p>Hello World</p>\"\n onChange={onChange}\n onDone={onDone}\n toolbarOpts={{ doneOn: 'blur' }}\n responseAreaProps={{ type: 'inline-dropdown' }}\n />,\n );\n\n await waitFor(() => {\n expect(InlineDropdownNode.configure).toHaveBeenCalled();\n });\n\n const configureCall = InlineDropdownNode.configure.mock.calls[InlineDropdownNode.configure.mock.calls.length - 1];\n const inlineDropdownOptions = configureCall[0];\n const editor = {\n getHTML: jest.fn(() => html),\n };\n\n inlineDropdownOptions.onInlineDropdownToolbarClose(editor);\n\n expect(editor.getHTML).toHaveBeenCalledTimes(1);\n expect(onChange).toHaveBeenCalledWith(html);\n expect(onDone).toHaveBeenCalledWith(html);\n });\n\n it('accepts size props', () => {\n const sizeProps = {\n width: 500,\n height: 300,\n minHeight: 200,\n maxHeight: 400,\n minWidth: 300,\n maxWidth: 600,\n };\n const { container } = render(<EditableHtml {...defaultProps} {...sizeProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts character limit', () => {\n const { container } = render(<EditableHtml {...defaultProps} charactersLimit={500} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts image support props', () => {\n const imageSupport = {\n add: jest.fn(),\n delete: jest.fn(),\n };\n const { container } = render(<EditableHtml {...defaultProps} imageSupport={imageSupport} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts max image dimensions', () => {\n const { container } = render(<EditableHtml {...defaultProps} maxImageWidth={800} maxImageHeight={600} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts language characters props', () => {\n const languageCharactersProps = [\n { label: 'Greek', value: 'greek' },\n { label: 'Cyrillic', value: 'cyrillic' },\n ];\n const { container } = render(<EditableHtml {...defaultProps} languageCharactersProps={languageCharactersProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts extra CSS rules', () => {\n const extraCSSRules = {\n '.custom-class': { color: 'red' },\n };\n const { container } = render(<EditableHtml {...defaultProps} extraCSSRules={extraCSSRules} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts upload sound support', () => {\n const uploadSoundSupport = {\n add: jest.fn(),\n delete: jest.fn(),\n };\n const { container } = render(<EditableHtml {...defaultProps} uploadSoundSupport={uploadSoundSupport} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts onKeyDown handler', () => {\n const onKeyDown = jest.fn();\n const { container } = render(<EditableHtml {...defaultProps} onKeyDown={onKeyDown} />);\n expect(container).toBeInTheDocument();\n });\n\n it('accepts disableImageAlignmentButtons prop', () => {\n const { container } = render(<EditableHtml {...defaultProps} disableImageAlignmentButtons={true} />);\n expect(container).toBeInTheDocument();\n });\n\n it('calls editorRef callback when editor is initialized', async () => {\n const editorRef = jest.fn();\n render(<EditableHtml {...defaultProps} editorRef={editorRef} />);\n\n await waitFor(() => {\n expect(editorRef).toHaveBeenCalled();\n });\n });\n\n it('calls editorRef with the editor instance', async () => {\n const editorRef = jest.fn();\n render(<EditableHtml {...defaultProps} editorRef={editorRef} />);\n\n await waitFor(() => {\n expect(editorRef).toHaveBeenCalled();\n // Verify it was called with an object that has editor-like properties\n const callArg = editorRef.mock.calls[0][0];\n expect(callArg).toHaveProperty('getHTML');\n expect(callArg).toHaveProperty('commands');\n });\n });\n\n it('handles editorRef being undefined', () => {\n const { container } = render(<EditableHtml {...defaultProps} editorRef={undefined} />);\n expect(container).toBeInTheDocument();\n });\n\n it('applies flex display to StyledEditorContent', async () => {\n const { getByTestId } = render(<EditableHtml {...defaultProps} />);\n await waitFor(() => {\n const editorContent = getByTestId('editor-content');\n expect(editorContent).toBeInTheDocument();\n });\n });\n\n it('does not run blur onChange/onDone while an image insert flow is active', async () => {\n jest.useFakeTimers();\n const onChange = jest.fn();\n const onDone = jest.fn();\n\n render(\n <EditableHtml\n {...defaultProps}\n markup=\"<p>Hello World</p>\"\n onChange={onChange}\n onDone={onDone}\n toolbarOpts={{ ...defaultProps.toolbarOpts, doneOn: 'blur' }}\n />,\n );\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const blurEditor = {\n getHTML: jest.fn(() => '<p>changed</p>'),\n schema: {},\n _insertingImage: true,\n _toolbarOpened: false,\n isActive: jest.fn(() => false),\n };\n\n editorConfig.onBlur({ editor: blurEditor });\n jest.advanceTimersByTime(200);\n\n expect(onChange).not.toHaveBeenCalled();\n expect(onDone).not.toHaveBeenCalled();\n\n jest.useRealTimers();\n });\n\n it('does not run blur onChange/onDone when editor has no schema', async () => {\n jest.useFakeTimers();\n const onChange = jest.fn();\n const onDone = jest.fn();\n\n render(\n <EditableHtml\n {...defaultProps}\n markup=\"<p>Hello World</p>\"\n onChange={onChange}\n onDone={onDone}\n toolbarOpts={{ doneOn: 'blur' }}\n />,\n );\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const getHTML = jest.fn(() => '<p>changed</p>');\n const blurEditor = {\n getHTML,\n schema: undefined,\n _insertingImage: false,\n _toolbarOpened: false,\n isActive: jest.fn(() => false),\n };\n\n editorConfig.onBlur({ editor: blurEditor });\n jest.advanceTimersByTime(200);\n\n expect(getHTML).not.toHaveBeenCalled();\n expect(onChange).not.toHaveBeenCalled();\n expect(onDone).not.toHaveBeenCalled();\n\n jest.useRealTimers();\n });\n\n it('calls getHTML once on blur and passes the same html to onChange and onDone', async () => {\n jest.useFakeTimers();\n const onChange = jest.fn();\n const onDone = jest.fn();\n const html = '<p>from editor</p>';\n\n render(\n <EditableHtml\n {...defaultProps}\n markup=\"<p>Hello World</p>\"\n onChange={onChange}\n onDone={onDone}\n toolbarOpts={{ doneOn: 'blur' }}\n />,\n );\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const getHTML = jest.fn(() => html);\n const blurEditor = {\n getHTML,\n schema: {},\n _insertingImage: false,\n _toolbarOpened: false,\n isActive: jest.fn(() => false),\n };\n\n editorConfig.onBlur({ editor: blurEditor });\n jest.advanceTimersByTime(200);\n\n expect(getHTML).toHaveBeenCalledTimes(1);\n expect(onChange).toHaveBeenCalledWith(html);\n expect(onDone).toHaveBeenCalledWith(html);\n\n jest.useRealTimers();\n });\n\n describe('onUpdate callback', () => {\n it('calls onChange when transaction.isDone is true', async () => {\n const onChange = jest.fn();\n const markup = '<p>Initial content</p>';\n\n render(<EditableHtml {...defaultProps} markup={markup} onChange={onChange} />);\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const mockEditor = {\n getHTML: jest.fn(() => '<p>Updated content</p>'),\n };\n\n const mockTransaction = {\n isDone: true,\n };\n\n editorConfig.onUpdate({ editor: mockEditor, transaction: mockTransaction });\n\n expect(onChange).toHaveBeenCalledWith('<p>Updated content</p>');\n });\n\n it('does not call onChange when transaction.isDone is false even if markup differs from editor HTML', async () => {\n const onChange = jest.fn();\n const markup = '<p>Initial content</p>';\n\n render(<EditableHtml {...defaultProps} markup={markup} onChange={onChange} />);\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const mockEditor = {\n getHTML: jest.fn(() => '<p>Different content</p>'),\n };\n\n const mockTransaction = {\n isDone: false,\n };\n\n editorConfig.onUpdate({ editor: mockEditor, transaction: mockTransaction });\n\n expect(onChange).not.toHaveBeenCalled();\n });\n\n it('does not call onChange when transaction.isDone is false and markup matches editor HTML', async () => {\n const onChange = jest.fn();\n const markup = '<p>Same content</p>';\n\n render(<EditableHtml {...defaultProps} markup={markup} onChange={onChange} />);\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const mockEditor = {\n getHTML: jest.fn(() => '<p>Same content</p>'),\n };\n\n const mockTransaction = {\n isDone: false,\n };\n\n editorConfig.onUpdate({ editor: mockEditor, transaction: mockTransaction });\n\n expect(onChange).not.toHaveBeenCalled();\n });\n\n it('calls onChange when transaction.isDone is true even if markup matches', async () => {\n const onChange = jest.fn();\n const markup = '<p>Same content</p>';\n\n render(<EditableHtml {...defaultProps} markup={markup} onChange={onChange} />);\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const mockEditor = {\n getHTML: jest.fn(() => '<p>Same content</p>'),\n };\n\n const mockTransaction = {\n isDone: true,\n };\n\n editorConfig.onUpdate({ editor: mockEditor, transaction: mockTransaction });\n\n expect(onChange).toHaveBeenCalledWith('<p>Same content</p>');\n });\n\n it('does not call onChange when onChange is not provided', async () => {\n const markup = '<p>Content</p>';\n\n render(<EditableHtml {...defaultProps} markup={markup} onChange={undefined} />);\n\n await waitFor(() => {\n expect(useEditor).toHaveBeenCalled();\n });\n\n const editorConfig = useEditor.mock.calls[useEditor.mock.calls.length - 1][0];\n const mockEditor = {\n getHTML: jest.fn(() => '<p>Updated content</p>'),\n };\n\n const mockTransaction = {\n isDone: true,\n };\n\n // Should not throw error when onChange is undefined\n expect(() => {\n editorConfig.onUpdate({ editor: mockEditor, transaction: mockTransaction });\n }).not.toThrow();\n });\n });\n});\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAAgE,IAAAK,SAAA;AAAA,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAEhE;AACAoB,IAAI,CAACC,IAAI,CAAC,eAAe,EAAE;EAAA,OAAO;IAChCC,aAAa,EAAE,SAAfA,aAAaA,CAAAC,IAAA;MAAA,IAAKC,MAAM,GAAAD,IAAA,CAANC,MAAM;QAAKC,KAAK,OAAAC,yBAAA,aAAAH,IAAA,EAAAzB,SAAA;MAAA,oBAAOP,MAAA,YAAAoC,aAAA,YAAAC,SAAA;QAAK,eAAY;MAAgB,GAAKH,KAAK,CAAG,CAAC;IAAA;IACxFI,SAAS,EAAET,IAAI,CAACU,EAAE,CAAC,UAACC,MAAM,EAAK;MAC7B,IAAMC,UAAU,GAAG;QACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;UAAA,OAAM,qBAAqB;QAAA,EAAC;QAC7CI,WAAW,EAAEd,IAAI,CAACU,EAAE,CAAC,CAAC;QACtBK,QAAQ,EAAE;UACRC,UAAU,EAAEhB,IAAI,CAACU,EAAE,CAAC;QACtB,CAAC;QACDO,QAAQ,EAAEjB,IAAI,CAACU,EAAE,CAAC;UAAA,OAAM,KAAK;QAAA,EAAC;QAC9BQ,SAAS,EAAE;MACb,CAAC;MACD,OAAON,UAAU;IACnB,CAAC,CAAC;IACFO,cAAc,EAAEnB,IAAI,CAACU,EAAE,CAAC;MAAA,OAAO;QAC7BQ,SAAS,EAAE;MACb,CAAC;IAAA,CAAC;EACJ,CAAC;AAAA,CAAC,CAAC;AAEHlB,IAAI,CAACC,IAAI,CAAC,qBAAqB,EAAE;EAAA,OAAO;IACtCmB,UAAU,EAAE,IAAI;IAChB,WAAS;MACPC,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,8BAA8B,EAAE;EAAA,OAAO;IAC/CqB,YAAY,EAAE,CAAC;EACjB,CAAC;AAAA,CAAC,CAAC;AAEHtB,IAAI,CAACC,IAAI,CAAC,mCAAmC,EAAE;EAAA,OAAO;IACpDsB,cAAc,EAAE;MACdF,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,+BAA+B,EAAE;EAAA,OAAO;IAChDmB,UAAU,EAAE,IAAI;IAChB,WAAS,CAAC;EACZ,CAAC;AAAA,CAAC,CAAC;AAEHpB,IAAI,CAACC,IAAI,CAAC,6BAA6B,EAAE;EAAA,OAAO;IAC9CmB,UAAU,EAAE,IAAI;IAChB,WAAS,CAAC;EACZ,CAAC;AAAA,CAAC,CAAC;AAEHpB,IAAI,CAACC,IAAI,CAAC,8BAA8B,EAAE;EAAA,OAAO;IAC/CmB,UAAU,EAAE,IAAI;IAChB,WAAS;MACPC,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,yBAAyB,EAAE;EAAA,OAAO;IAC1CmB,UAAU,EAAE,IAAI;IAChB,WAAS,CAAC;EACZ,CAAC;AAAA,CAAC,CAAC;AAEHpB,IAAI,CAACC,IAAI,CAAC,yBAAyB,EAAE;EAAA,OAAO;IAC1CmB,UAAU,EAAE,IAAI;IAChB,WAAS,CAAC;EACZ,CAAC;AAAA,CAAC,CAAC;AAEHpB,IAAI,CAACC,IAAI,CAAC,6BAA6B,EAAE;EAAA,OAAO;IAC9CuB,QAAQ,EAAE,CAAC;EACb,CAAC;AAAA,CAAC,CAAC;AAEHxB,IAAI,CAACC,IAAI,CAAC,mCAAmC,EAAE;EAAA,OAAO;IACpDwB,iBAAiB,EAAE,CAAC,CAAC;IACrBC,mBAAmB,EAAE,CAAC;EACxB,CAAC;AAAA,CAAC,CAAC;AAEH1B,IAAI,CAACC,IAAI,CAAC,8BAA8B,EAAE;EAAA,OAAO;IAC/CmB,UAAU,EAAE,IAAI;IAChB,WAAS,CAAC;EACZ,CAAC;AAAA,CAAC,CAAC;AAEHpB,IAAI,CAACC,IAAI,CAAC,qCAAqC,EAAE;EAAA,OAAO;IACtD0B,oBAAoB,EAAE,CAAC;EACzB,CAAC;AAAA,CAAC,CAAC;AAEH3B,IAAI,CAACC,IAAI,CAAC,kCAAkC,EAAE;EAAA,OAAO;IACnD2B,gBAAgB,EAAE,CAAC;EACrB,CAAC;AAAA,CAAC,CAAC;AAEH5B,IAAI,CAACC,IAAI,CAAC,+CAA+C,EAAE;EAAA,OAAO;IAChE4B,0BAA0B,EAAE,CAAC;EAC/B,CAAC;AAAA,CAAC,CAAC;AAEH7B,IAAI,CAACC,IAAI,CAAC,4BAA4B,EAAE;EAAA,OAAO;IAC7C6B,+BAA+B,EAAE;MAC/BT,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B,CAAC;IACDqB,kBAAkB,EAAE;MAClBV,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B,CAAC;IACDsB,kBAAkB,EAAE;MAClBX,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B,CAAC;IACDuB,iBAAiB,EAAE;MACjBZ,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B,CAAC;IACDwB,qBAAqB,EAAE;MACrBb,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,oBAAoB,EAAE;EAAA,OAAO;IACrCkC,QAAQ,EAAE;MACRd,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,qBAAqB,EAAE;EAAA,OAAO;IACtCmC,eAAe,EAAE;MACff,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,qBAAqB,EAAE;EAAA,OAAO;IACtCoC,KAAK,EAAE;MACLhB,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,mBAAmB,EAAE;EAAA,OAAO;IACpCqC,OAAO,EAAE;MACPjB,SAAS,EAAErB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;MAAA,CAAC;IAC/B;EACF,CAAC;AAAA,CAAC,CAAC;AAEHV,IAAI,CAACC,IAAI,CAAC,+BAA+B,EAAE;EAAA,OAAO;IAChDmB,UAAU,EAAE,IAAI;IAChB,WAAS,SAATmB,QAAOA,CAAAC,KAAA;MAAA,IAAKC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;MAAA,oBAAOtE,MAAA,YAAAoC,aAAA;QAAK,eAAY;MAAkB,GAAEkC,QAAc,CAAC;IAAA;EACjF,CAAC;AAAA,CAAC,CAAC;AAEHzC,IAAI,CAACC,IAAI,CAAC,eAAe,EAAE;EAAA,OAAAT,aAAA,CAAAA,aAAA,KACtBQ,IAAI,CAAC0C,aAAa,CAAC,eAAe,CAAC;IACtCC,eAAe,EAAE3C,IAAI,CAACU,EAAE,CAAC;MAAA,OAAM,EAAE;IAAA;EAAC;AAAA,CAClC,CAAC;AAEHkC,QAAQ,CAAC,cAAc,EAAE,YAAM;EAC7B,IAAMC,YAAY,GAAG;IACnBC,MAAM,EAAE,oBAAoB;IAC5BC,QAAQ,EAAE/C,IAAI,CAACU,EAAE,CAAC,CAAC;IACnBsC,MAAM,EAAEhD,IAAI,CAACU,EAAE,CAAC,CAAC;IACjBuC,QAAQ,EAAE;EACZ,CAAC;EAEDC,UAAU,CAAC,YAAM;IACflD,IAAI,CAACmD,aAAa,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFC,EAAE,CAAC,0BAA0B,EAAE,YAAM;IACnC,IAAAC,OAAA,GAAsB,IAAAC,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,EAAKV,YAAe,CAAC,CAAC;MAAxDW,SAAS,GAAAH,OAAA,CAATG,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,0BAA0B,EAAE,YAAM;IACnC,IAAAO,QAAA,GAAwB,IAAAL,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,EAAKV,YAAe,CAAC,CAAC;MAA1De,WAAW,GAAAD,QAAA,CAAXC,WAAW;IACnBH,MAAM,CAACG,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;EAC7D,CAAC,CAAC;EAEFN,EAAE,CAAC,mDAAmD,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAC,QAAA;IAAA,IAAAC,QAAA,EAAAL,WAAA;IAAA,OAAAE,YAAA,YAAAI,IAAA,WAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAAJ,QAAA,GAC9B,IAAAX,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,EAAKV,YAAe,CAAC,CAAC,EAA1De,WAAW,GAAAK,QAAA,CAAXL,WAAW;UAAAO,QAAA,CAAAE,IAAA;UAAA,OACb,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAACG,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;UAC3D,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAS,QAAA,CAAAI,IAAA;MAAA;IAAA,GAAAP,OAAA;EAAA,CACH,GAAC;EAEFZ,EAAE,CAAC,gCAAgC,EAAE,YAAM;IACzC,IAAMoB,WAAW,GAAG;MAClBC,QAAQ,EAAE,KAAK;MACfC,SAAS,EAAE,QAAQ;MACnBC,aAAa,EAAE,IAAI;MACnBC,QAAQ,EAAE,KAAK;MACfC,MAAM,EAAE;IACV,CAAC;IACD,IAAAC,QAAA,GAAsB,IAAAxB,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAE2B,WAAW,EAAEA;MAAY,EAAE,CAAC,CAAC;MAAlFhB,SAAS,GAAAsB,QAAA,CAATtB,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,+BAA+B,EAAE,YAAM;IACxC,IAAM2B,aAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC;IACrD,IAAAC,QAAA,GAAsB,IAAA1B,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEkC,aAAa,EAAEA;MAAc,EAAE,CAAC,CAAC;MAAtFvB,SAAS,GAAAwB,QAAA,CAATxB,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,sBAAsB,EAAE,YAAM;IAC/B,IAAM6B,WAAW,GAAG;MAClBC,cAAc,EAAE;QAAEjC,QAAQ,EAAE;MAAM,CAAC;MACnCkC,kBAAkB,EAAE;QAAElC,QAAQ,EAAE;MAAM;IACxC,CAAC;IACD,IAAAmC,QAAA,GAAsB,IAAA9B,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEoC,WAAW,EAAEA;MAAY,EAAE,CAAC,CAAC;MAAlFzB,SAAS,GAAA4B,QAAA,CAAT5B,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,6BAA6B,EAAE,YAAM;IACtC,IAAMiC,iBAAiB,GAAG;MACxBC,IAAI,EAAE,+BAA+B;MACrCC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAAC,QAAA,GAAsB,IAAAlC,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEwC,iBAAiB,EAAEA;MAAkB,EAAE,CAAC,CAAC;MAA9F7B,SAAS,GAAAgC,QAAA,CAAThC,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,4DAA4D,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA0B,SAAA;IAAA,IAAA1C,QAAA,EAAAC,MAAA,EAAA0C,IAAA,EAAAC,aAAA,EAAAC,qBAAA,EAAAxF,MAAA;IAAA,OAAA0D,YAAA,YAAAI,IAAA,WAAA2B,SAAA;MAAA,kBAAAA,SAAA,CAAAzB,IAAA,GAAAyB,SAAA,CAAAxB,IAAA;QAAA;UACzDtB,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;UACpBsC,MAAM,GAAGhD,IAAI,CAACU,EAAE,CAAC,CAAC;UAClBgF,IAAI,GAAG,mCAAmC;UAEhD,IAAApC,cAAM,eACJnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBACPqC,YAAY;YAChBC,MAAM,EAAC,oBAAoB;YAC3BC,QAAQ,EAAEA,QAAS;YACnBC,MAAM,EAAEA,MAAO;YACfwB,WAAW,EAAE;cAAEK,MAAM,EAAE;YAAO,CAAE;YAChCQ,iBAAiB,EAAE;cAAEC,IAAI,EAAE;YAAkB;UAAE,EAChD,CACH,CAAC;UAACO,SAAA,CAAAxB,IAAA;UAAA,OAEI,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAACzB,gCAAkB,CAACX,SAAS,CAAC,CAACyE,gBAAgB,CAAC,CAAC;UACzD,CAAC,CAAC;QAAA;UAEIH,aAAa,GAAG3D,gCAAkB,CAACX,SAAS,CAACpB,IAAI,CAAC8F,KAAK,CAAC/D,gCAAkB,CAACX,SAAS,CAACpB,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC;UAC3GkG,qBAAqB,GAAGD,aAAa,CAAC,CAAC,CAAC;UACxCvF,MAAM,GAAG;YACbS,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;cAAA,OAAMgF,IAAI;YAAA;UAC7B,CAAC;UAEDE,qBAAqB,CAACI,4BAA4B,CAAC5F,MAAM,CAAC;UAE1DqD,MAAM,CAACrD,MAAM,CAACS,OAAO,CAAC,CAACoF,qBAAqB,CAAC,CAAC,CAAC;UAC/CxC,MAAM,CAACV,QAAQ,CAAC,CAACmD,oBAAoB,CAACR,IAAI,CAAC;UAC3CjC,MAAM,CAACT,MAAM,CAAC,CAACkD,oBAAoB,CAACR,IAAI,CAAC;QAAC;QAAA;UAAA,OAAAG,SAAA,CAAAtB,IAAA;MAAA;IAAA,GAAAkB,QAAA;EAAA,CAC3C,GAAC;EAEFrC,EAAE,CAAC,oBAAoB,EAAE,YAAM;IAC7B,IAAM+C,SAAS,GAAG;MAChBC,KAAK,EAAE,GAAG;MACVC,MAAM,EAAE,GAAG;MACXC,SAAS,EAAE,GAAG;MACdC,SAAS,EAAE,GAAG;MACdC,QAAQ,EAAE,GAAG;MACbC,QAAQ,EAAE;IACZ,CAAC;IACD,IAAAC,QAAA,GAAsB,IAAApD,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY,EAAMsD,SAAS,CAAG,CAAC,CAAC;MAAvE3C,SAAS,GAAAkD,QAAA,CAATlD,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,yBAAyB,EAAE,YAAM;IAClC,IAAAuD,QAAA,GAAsB,IAAArD,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAE+D,eAAe,EAAE;MAAI,EAAE,CAAC,CAAC;MAA9EpD,SAAS,GAAAmD,QAAA,CAATnD,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,6BAA6B,EAAE,YAAM;IACtC,IAAMyD,YAAY,GAAG;MACnBC,GAAG,EAAE9G,IAAI,CAACU,EAAE,CAAC,CAAC;MACd,UAAQV,IAAI,CAACU,EAAE,CAAC;IAClB,CAAC;IACD,IAAAqG,QAAA,GAAsB,IAAAzD,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEgE,YAAY,EAAEA;MAAa,EAAE,CAAC,CAAC;MAApFrD,SAAS,GAAAuD,QAAA,CAATvD,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,8BAA8B,EAAE,YAAM;IACvC,IAAA4D,QAAA,GAAsB,IAAA1D,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEoE,aAAa,EAAE,GAAI;QAACC,cAAc,EAAE;MAAI,EAAE,CAAC,CAAC;MAAjG1D,SAAS,GAAAwD,QAAA,CAATxD,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,mCAAmC,EAAE,YAAM;IAC5C,IAAM+D,uBAAuB,GAAG,CAC9B;MAAEC,KAAK,EAAE,OAAO;MAAEC,KAAK,EAAE;IAAQ,CAAC,EAClC;MAAED,KAAK,EAAE,UAAU;MAAEC,KAAK,EAAE;IAAW,CAAC,CACzC;IACD,IAAAC,SAAA,GAAsB,IAAAhE,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEsE,uBAAuB,EAAEA;MAAwB,EAAE,CAAC,CAAC;MAA1G3D,SAAS,GAAA8D,SAAA,CAAT9D,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,yBAAyB,EAAE,YAAM;IAClC,IAAMmE,aAAa,GAAG;MACpB,eAAe,EAAE;QAAEC,KAAK,EAAE;MAAM;IAClC,CAAC;IACD,IAAAC,SAAA,GAAsB,IAAAnE,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAE0E,aAAa,EAAEA;MAAc,EAAE,CAAC,CAAC;MAAtF/D,SAAS,GAAAiE,SAAA,CAATjE,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,8BAA8B,EAAE,YAAM;IACvC,IAAMsE,kBAAkB,GAAG;MACzBZ,GAAG,EAAE9G,IAAI,CAACU,EAAE,CAAC,CAAC;MACd,UAAQV,IAAI,CAACU,EAAE,CAAC;IAClB,CAAC;IACD,IAAAiH,SAAA,GAAsB,IAAArE,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAE6E,kBAAkB,EAAEA;MAAmB,EAAE,CAAC,CAAC;MAAhGlE,SAAS,GAAAmE,SAAA,CAATnE,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,2BAA2B,EAAE,YAAM;IACpC,IAAMwE,SAAS,GAAG5H,IAAI,CAACU,EAAE,CAAC,CAAC;IAC3B,IAAAmH,SAAA,GAAsB,IAAAvE,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAE+E,SAAS,EAAEA;MAAU,EAAE,CAAC,CAAC;MAA9EpE,SAAS,GAAAqE,SAAA,CAATrE,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,2CAA2C,EAAE,YAAM;IACpD,IAAA0E,SAAA,GAAsB,IAAAxE,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEkF,4BAA4B,EAAE;MAAK,EAAE,CAAC,CAAC;MAA5FvE,SAAS,GAAAsE,SAAA,CAATtE,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,qDAAqD,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAiE,SAAA;IAAA,IAAAC,SAAA;IAAA,OAAAnE,YAAA,YAAAI,IAAA,WAAAgE,SAAA;MAAA,kBAAAA,SAAA,CAAA9D,IAAA,GAAA8D,SAAA,CAAA7D,IAAA;QAAA;UAClD4D,SAAS,GAAGjI,IAAI,CAACU,EAAE,CAAC,CAAC;UAC3B,IAAA4C,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;YAAEoF,SAAS,EAAEA;UAAU,EAAE,CAAC,CAAC;UAACC,SAAA,CAAA7D,IAAA;UAAA,OAE3D,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAACwE,SAAS,CAAC,CAACnC,gBAAgB,CAAC,CAAC;UACtC,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAoC,SAAA,CAAA3D,IAAA;MAAA;IAAA,GAAAyD,QAAA;EAAA,CACH,GAAC;EAEF5E,EAAE,CAAC,0CAA0C,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAoE,SAAA;IAAA,IAAAF,SAAA;IAAA,OAAAnE,YAAA,YAAAI,IAAA,WAAAkE,SAAA;MAAA,kBAAAA,SAAA,CAAAhE,IAAA,GAAAgE,SAAA,CAAA/D,IAAA;QAAA;UACvC4D,SAAS,GAAGjI,IAAI,CAACU,EAAE,CAAC,CAAC;UAC3B,IAAA4C,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;YAAEoF,SAAS,EAAEA;UAAU,EAAE,CAAC,CAAC;UAACG,SAAA,CAAA/D,IAAA;UAAA,OAE3D,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAACwE,SAAS,CAAC,CAACnC,gBAAgB,CAAC,CAAC;YACpC;YACA,IAAMuC,OAAO,GAAGJ,SAAS,CAAChI,IAAI,CAAC8F,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1CtC,MAAM,CAAC4E,OAAO,CAAC,CAACC,cAAc,CAAC,SAAS,CAAC;YACzC7E,MAAM,CAAC4E,OAAO,CAAC,CAACC,cAAc,CAAC,UAAU,CAAC;UAC5C,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAF,SAAA,CAAA7D,IAAA;MAAA;IAAA,GAAA4D,QAAA;EAAA,CACH,GAAC;EAEF/E,EAAE,CAAC,mCAAmC,EAAE,YAAM;IAC5C,IAAAmF,SAAA,GAAsB,IAAAjF,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;QAAEoF,SAAS,EAAEO;MAAU,EAAE,CAAC,CAAC;MAA9EhF,SAAS,GAAA+E,SAAA,CAAT/E,SAAS;IACjBC,MAAM,CAACD,SAAS,CAAC,CAACE,iBAAiB,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFN,EAAE,CAAC,6CAA6C,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA0E,SAAA;IAAA,IAAAC,SAAA,EAAA9E,WAAA;IAAA,OAAAE,YAAA,YAAAI,IAAA,WAAAyE,SAAA;MAAA,kBAAAA,SAAA,CAAAvE,IAAA,GAAAuE,SAAA,CAAAtE,IAAA;QAAA;UAAAqE,SAAA,GACxB,IAAApF,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,EAAKV,YAAe,CAAC,CAAC,EAA1De,WAAW,GAAA8E,SAAA,CAAX9E,WAAW;UAAA+E,SAAA,CAAAtE,IAAA;UAAA,OACb,IAAAC,eAAO,EAAC,YAAM;YAClB,IAAMsE,aAAa,GAAGhF,WAAW,CAAC,gBAAgB,CAAC;YACnDH,MAAM,CAACmF,aAAa,CAAC,CAAClF,iBAAiB,CAAC,CAAC;UAC3C,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAiF,SAAA,CAAApE,IAAA;MAAA;IAAA,GAAAkE,QAAA;EAAA,CACH,GAAC;EAEFrF,EAAE,CAAC,wEAAwE,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA8E,SAAA;IAAA,IAAA9F,QAAA,EAAAC,MAAA,EAAA8F,YAAA,EAAAC,UAAA;IAAA,OAAAjF,YAAA,YAAAI,IAAA,WAAA8E,SAAA;MAAA,kBAAAA,SAAA,CAAA5E,IAAA,GAAA4E,SAAA,CAAA3E,IAAA;QAAA;UAC3ErE,IAAI,CAACiJ,aAAa,CAAC,CAAC;UACdlG,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;UACpBsC,MAAM,GAAGhD,IAAI,CAACU,EAAE,CAAC,CAAC;UAExB,IAAA4C,cAAM,eACJnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBACPqC,YAAY;YAChBC,MAAM,EAAC,oBAAoB;YAC3BC,QAAQ,EAAEA,QAAS;YACnBC,MAAM,EAAEA,MAAO;YACfwB,WAAW,EAAAhF,aAAA,CAAAA,aAAA,KAAOqD,YAAY,CAAC2B,WAAW;cAAEK,MAAM,EAAE;YAAM;UAAG,EAC9D,CACH,CAAC;UAACmE,SAAA,CAAA3E,IAAA;UAAA,OAEI,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;UACtC,CAAC,CAAC;QAAA;UAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;UACvEqJ,UAAU,GAAG;YACjBlI,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;cAAA,OAAM,gBAAgB;YAAA,EAAC;YACxCwI,MAAM,EAAE,CAAC,CAAC;YACVC,eAAe,EAAE,IAAI;YACrBC,cAAc,EAAE,KAAK;YACrBnI,QAAQ,EAAEjB,IAAI,CAACU,EAAE,CAAC;cAAA,OAAM,KAAK;YAAA;UAC/B,CAAC;UAEDoI,YAAY,CAACO,MAAM,CAAC;YAAEjJ,MAAM,EAAE2I;UAAW,CAAC,CAAC;UAC3C/I,IAAI,CAACsJ,mBAAmB,CAAC,GAAG,CAAC;UAE7B7F,MAAM,CAACV,QAAQ,CAAC,CAACwG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UACvCrC,MAAM,CAACT,MAAM,CAAC,CAACuG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UAErC9F,IAAI,CAACwJ,aAAa,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAR,SAAA,CAAAzE,IAAA;MAAA;IAAA,GAAAsE,QAAA;EAAA,CACtB,GAAC;EAEFzF,EAAE,CAAC,6DAA6D,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA0F,SAAA;IAAA,IAAA1G,QAAA,EAAAC,MAAA,EAAA8F,YAAA,EAAAjI,OAAA,EAAAkI,UAAA;IAAA,OAAAjF,YAAA,YAAAI,IAAA,WAAAwF,SAAA;MAAA,kBAAAA,SAAA,CAAAtF,IAAA,GAAAsF,SAAA,CAAArF,IAAA;QAAA;UAChErE,IAAI,CAACiJ,aAAa,CAAC,CAAC;UACdlG,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;UACpBsC,MAAM,GAAGhD,IAAI,CAACU,EAAE,CAAC,CAAC;UAExB,IAAA4C,cAAM,eACJnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBACPqC,YAAY;YAChBC,MAAM,EAAC,oBAAoB;YAC3BC,QAAQ,EAAEA,QAAS;YACnBC,MAAM,EAAEA,MAAO;YACfwB,WAAW,EAAE;cAAEK,MAAM,EAAE;YAAO;UAAE,EACjC,CACH,CAAC;UAAC6E,SAAA,CAAArF,IAAA;UAAA,OAEI,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;UACtC,CAAC,CAAC;QAAA;UAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;UACvEmB,OAAO,GAAGb,IAAI,CAACU,EAAE,CAAC;YAAA,OAAM,gBAAgB;UAAA,EAAC;UACzCqI,UAAU,GAAG;YACjBlI,OAAO,EAAPA,OAAO;YACPqI,MAAM,EAAEV,SAAS;YACjBW,eAAe,EAAE,KAAK;YACtBC,cAAc,EAAE,KAAK;YACrBnI,QAAQ,EAAEjB,IAAI,CAACU,EAAE,CAAC;cAAA,OAAM,KAAK;YAAA;UAC/B,CAAC;UAEDoI,YAAY,CAACO,MAAM,CAAC;YAAEjJ,MAAM,EAAE2I;UAAW,CAAC,CAAC;UAC3C/I,IAAI,CAACsJ,mBAAmB,CAAC,GAAG,CAAC;UAE7B7F,MAAM,CAAC5C,OAAO,CAAC,CAAC0I,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UACtCrC,MAAM,CAACV,QAAQ,CAAC,CAACwG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UACvCrC,MAAM,CAACT,MAAM,CAAC,CAACuG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UAErC9F,IAAI,CAACwJ,aAAa,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAE,SAAA,CAAAnF,IAAA;MAAA;IAAA,GAAAkF,QAAA;EAAA,CACtB,GAAC;EAEFrG,EAAE,CAAC,4EAA4E,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA4F,SAAA;IAAA,IAAA5G,QAAA,EAAAC,MAAA,EAAA0C,IAAA,EAAAoD,YAAA,EAAAjI,OAAA,EAAAkI,UAAA;IAAA,OAAAjF,YAAA,YAAAI,IAAA,WAAA0F,SAAA;MAAA,kBAAAA,SAAA,CAAAxF,IAAA,GAAAwF,SAAA,CAAAvF,IAAA;QAAA;UAC/ErE,IAAI,CAACiJ,aAAa,CAAC,CAAC;UACdlG,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;UACpBsC,MAAM,GAAGhD,IAAI,CAACU,EAAE,CAAC,CAAC;UAClBgF,IAAI,GAAG,oBAAoB;UAEjC,IAAApC,cAAM,eACJnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBACPqC,YAAY;YAChBC,MAAM,EAAC,oBAAoB;YAC3BC,QAAQ,EAAEA,QAAS;YACnBC,MAAM,EAAEA,MAAO;YACfwB,WAAW,EAAE;cAAEK,MAAM,EAAE;YAAO;UAAE,EACjC,CACH,CAAC;UAAC+E,SAAA,CAAAvF,IAAA;UAAA,OAEI,IAAAC,eAAO,EAAC,YAAM;YAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;UACtC,CAAC,CAAC;QAAA;UAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;UACvEmB,OAAO,GAAGb,IAAI,CAACU,EAAE,CAAC;YAAA,OAAMgF,IAAI;UAAA,EAAC;UAC7BqD,UAAU,GAAG;YACjBlI,OAAO,EAAPA,OAAO;YACPqI,MAAM,EAAE,CAAC,CAAC;YACVC,eAAe,EAAE,KAAK;YACtBC,cAAc,EAAE,KAAK;YACrBnI,QAAQ,EAAEjB,IAAI,CAACU,EAAE,CAAC;cAAA,OAAM,KAAK;YAAA;UAC/B,CAAC;UAEDoI,YAAY,CAACO,MAAM,CAAC;YAAEjJ,MAAM,EAAE2I;UAAW,CAAC,CAAC;UAC3C/I,IAAI,CAACsJ,mBAAmB,CAAC,GAAG,CAAC;UAE7B7F,MAAM,CAAC5C,OAAO,CAAC,CAACoF,qBAAqB,CAAC,CAAC,CAAC;UACxCxC,MAAM,CAACV,QAAQ,CAAC,CAACmD,oBAAoB,CAACR,IAAI,CAAC;UAC3CjC,MAAM,CAACT,MAAM,CAAC,CAACkD,oBAAoB,CAACR,IAAI,CAAC;UAEzC1F,IAAI,CAACwJ,aAAa,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAI,SAAA,CAAArF,IAAA;MAAA;IAAA,GAAAoF,QAAA;EAAA,CACtB,GAAC;EAEF/G,QAAQ,CAAC,mBAAmB,EAAE,YAAM;IAClCQ,EAAE,CAAC,gDAAgD,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA8F,SAAA;MAAA,IAAA9G,QAAA,EAAAD,MAAA,EAAAgG,YAAA,EAAAlI,UAAA,EAAAkJ,eAAA;MAAA,OAAAhG,YAAA,YAAAI,IAAA,WAAA6F,SAAA;QAAA,kBAAAA,SAAA,CAAA3F,IAAA,GAAA2F,SAAA,CAAA1F,IAAA;UAAA;YAC7CtB,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;YACpBoC,MAAM,GAAG,wBAAwB;YAEvC,IAAAQ,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;cAAEC,MAAM,EAAEA,MAAO;cAACC,QAAQ,EAAEA;YAAS,EAAE,CAAC,CAAC;YAACgH,SAAA,CAAA1F,IAAA;YAAA,OAEzE,IAAAC,eAAO,EAAC,YAAM;cAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC;UAAA;YAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvEkB,UAAU,GAAG;cACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;gBAAA,OAAM,wBAAwB;cAAA;YACjD,CAAC;YAEKoJ,eAAe,GAAG;cACtBE,MAAM,EAAE;YACV,CAAC;YAEDlB,YAAY,CAACmB,QAAQ,CAAC;cAAE7J,MAAM,EAAEQ,UAAU;cAAEsJ,WAAW,EAAEJ;YAAgB,CAAC,CAAC;YAE3ErG,MAAM,CAACV,QAAQ,CAAC,CAACmD,oBAAoB,CAAC,wBAAwB,CAAC;UAAC;UAAA;YAAA,OAAA6D,SAAA,CAAAxF,IAAA;QAAA;MAAA,GAAAsF,QAAA;IAAA,CACjE,GAAC;IAEFzG,EAAE,CAAC,iGAAiG,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAoG,SAAA;MAAA,IAAApH,QAAA,EAAAD,MAAA,EAAAgG,YAAA,EAAAlI,UAAA,EAAAkJ,eAAA;MAAA,OAAAhG,YAAA,YAAAI,IAAA,WAAAkG,SAAA;QAAA,kBAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA/F,IAAA;UAAA;YAC9FtB,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;YACpBoC,MAAM,GAAG,wBAAwB;YAEvC,IAAAQ,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;cAAEC,MAAM,EAAEA,MAAO;cAACC,QAAQ,EAAEA;YAAS,EAAE,CAAC,CAAC;YAACqH,SAAA,CAAA/F,IAAA;YAAA,OAEzE,IAAAC,eAAO,EAAC,YAAM;cAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC;UAAA;YAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvEkB,UAAU,GAAG;cACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;gBAAA,OAAM,0BAA0B;cAAA;YACnD,CAAC;YAEKoJ,eAAe,GAAG;cACtBE,MAAM,EAAE;YACV,CAAC;YAEDlB,YAAY,CAACmB,QAAQ,CAAC;cAAE7J,MAAM,EAAEQ,UAAU;cAAEsJ,WAAW,EAAEJ;YAAgB,CAAC,CAAC;YAE3ErG,MAAM,CAACV,QAAQ,CAAC,CAACwG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAsE,SAAA,CAAA7F,IAAA;QAAA;MAAA,GAAA4F,QAAA;IAAA,CACzC,GAAC;IAEF/G,EAAE,CAAC,wFAAwF,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAsG,SAAA;MAAA,IAAAtH,QAAA,EAAAD,MAAA,EAAAgG,YAAA,EAAAlI,UAAA,EAAAkJ,eAAA;MAAA,OAAAhG,YAAA,YAAAI,IAAA,WAAAoG,SAAA;QAAA,kBAAAA,SAAA,CAAAlG,IAAA,GAAAkG,SAAA,CAAAjG,IAAA;UAAA;YACrFtB,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;YACpBoC,MAAM,GAAG,qBAAqB;YAEpC,IAAAQ,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;cAAEC,MAAM,EAAEA,MAAO;cAACC,QAAQ,EAAEA;YAAS,EAAE,CAAC,CAAC;YAACuH,SAAA,CAAAjG,IAAA;YAAA,OAEzE,IAAAC,eAAO,EAAC,YAAM;cAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC;UAAA;YAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvEkB,UAAU,GAAG;cACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;gBAAA,OAAM,qBAAqB;cAAA;YAC9C,CAAC;YAEKoJ,eAAe,GAAG;cACtBE,MAAM,EAAE;YACV,CAAC;YAEDlB,YAAY,CAACmB,QAAQ,CAAC;cAAE7J,MAAM,EAAEQ,UAAU;cAAEsJ,WAAW,EAAEJ;YAAgB,CAAC,CAAC;YAE3ErG,MAAM,CAACV,QAAQ,CAAC,CAACwG,GAAG,CAACzD,gBAAgB,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAwE,SAAA,CAAA/F,IAAA;QAAA;MAAA,GAAA8F,QAAA;IAAA,CACzC,GAAC;IAEFjH,EAAE,CAAC,uEAAuE,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAwG,UAAA;MAAA,IAAAxH,QAAA,EAAAD,MAAA,EAAAgG,YAAA,EAAAlI,UAAA,EAAAkJ,eAAA;MAAA,OAAAhG,YAAA,YAAAI,IAAA,WAAAsG,UAAA;QAAA,kBAAAA,UAAA,CAAApG,IAAA,GAAAoG,UAAA,CAAAnG,IAAA;UAAA;YACpEtB,QAAQ,GAAG/C,IAAI,CAACU,EAAE,CAAC,CAAC;YACpBoC,MAAM,GAAG,qBAAqB;YAEpC,IAAAQ,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;cAAEC,MAAM,EAAEA,MAAO;cAACC,QAAQ,EAAEA;YAAS,EAAE,CAAC,CAAC;YAACyH,UAAA,CAAAnG,IAAA;YAAA,OAEzE,IAAAC,eAAO,EAAC,YAAM;cAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC;UAAA;YAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvEkB,UAAU,GAAG;cACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;gBAAA,OAAM,qBAAqB;cAAA;YAC9C,CAAC;YAEKoJ,eAAe,GAAG;cACtBE,MAAM,EAAE;YACV,CAAC;YAEDlB,YAAY,CAACmB,QAAQ,CAAC;cAAE7J,MAAM,EAAEQ,UAAU;cAAEsJ,WAAW,EAAEJ;YAAgB,CAAC,CAAC;YAE3ErG,MAAM,CAACV,QAAQ,CAAC,CAACmD,oBAAoB,CAAC,qBAAqB,CAAC;UAAC;UAAA;YAAA,OAAAsE,UAAA,CAAAjG,IAAA;QAAA;MAAA,GAAAgG,SAAA;IAAA,CAC9D,GAAC;IAEFnH,EAAE,CAAC,sDAAsD,mBAAAS,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAA0G,UAAA;MAAA,IAAA3H,MAAA,EAAAgG,YAAA,EAAAlI,UAAA,EAAAkJ,eAAA;MAAA,OAAAhG,YAAA,YAAAI,IAAA,WAAAwG,UAAA;QAAA,kBAAAA,UAAA,CAAAtG,IAAA,GAAAsG,UAAA,CAAArG,IAAA;UAAA;YACnDvB,MAAM,GAAG,gBAAgB;YAE/B,IAAAQ,cAAM,eAACnF,MAAA,YAAAoC,aAAA,CAAC/B,aAAA,CAAA+E,YAAY,MAAA/C,SAAA,iBAAKqC,YAAY;cAAEC,MAAM,EAAEA,MAAO;cAACC,QAAQ,EAAEyF;YAAU,EAAE,CAAC,CAAC;YAACkC,UAAA,CAAArG,IAAA;YAAA,OAE1E,IAAAC,eAAO,EAAC,YAAM;cAClBb,MAAM,CAAChD,iBAAS,CAAC,CAACqF,gBAAgB,CAAC,CAAC;YACtC,CAAC,CAAC;UAAA;YAEIgD,YAAY,GAAGrI,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACtF,iBAAS,CAACR,IAAI,CAAC8F,KAAK,CAACrG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvEkB,UAAU,GAAG;cACjBC,OAAO,EAAEb,IAAI,CAACU,EAAE,CAAC;gBAAA,OAAM,wBAAwB;cAAA;YACjD,CAAC;YAEKoJ,eAAe,GAAG;cACtBE,MAAM,EAAE;YACV,CAAC,EAED;YACAvG,MAAM,CAAC,YAAM;cACXqF,YAAY,CAACmB,QAAQ,CAAC;gBAAE7J,MAAM,EAAEQ,UAAU;gBAAEsJ,WAAW,EAAEJ;cAAgB,CAAC,CAAC;YAC7E,CAAC,CAAC,CAACP,GAAG,CAACoB,OAAO,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAD,UAAA,CAAAnG,IAAA;QAAA;MAAA,GAAAkG,SAAA;IAAA,CAClB,GAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
var _constants = _interopRequireWildcard(require("../constants"));
|
|
5
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
6
|
+
describe('Constants', function () {
|
|
7
|
+
describe('PIE_TOOLBAR__CLASS', function () {
|
|
8
|
+
it('is defined', function () {
|
|
9
|
+
expect(_constants.PIE_TOOLBAR__CLASS).toBeDefined();
|
|
10
|
+
});
|
|
11
|
+
it('has the correct value', function () {
|
|
12
|
+
expect(_constants.PIE_TOOLBAR__CLASS).toBe('pie-toolbar');
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('default export', function () {
|
|
16
|
+
it('contains PIE_TOOLBAR__CLASS', function () {
|
|
17
|
+
expect(_constants["default"].PIE_TOOLBAR__CLASS).toBe('pie-toolbar');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=constants.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.test.js","names":["_constants","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","it","expect","PIE_TOOLBAR__CLASS","toBeDefined","toBe","constants"],"sources":["../../src/__tests__/constants.test.js"],"sourcesContent":["import constants, { PIE_TOOLBAR__CLASS } from '../constants';\n\ndescribe('Constants', () => {\n describe('PIE_TOOLBAR__CLASS', () => {\n it('is defined', () => {\n expect(PIE_TOOLBAR__CLASS).toBeDefined();\n });\n\n it('has the correct value', () => {\n expect(PIE_TOOLBAR__CLASS).toBe('pie-toolbar');\n });\n });\n\n describe('default export', () => {\n it('contains PIE_TOOLBAR__CLASS', () => {\n expect(constants.PIE_TOOLBAR__CLASS).toBe('pie-toolbar');\n });\n });\n});\n"],"mappings":";;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AAA6D,SAAAD,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,wBAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE7DmB,QAAQ,CAAC,WAAW,EAAE,YAAM;EAC1BA,QAAQ,CAAC,oBAAoB,EAAE,YAAM;IACnCC,EAAE,CAAC,YAAY,EAAE,YAAM;MACrBC,MAAM,CAACC,6BAAkB,CAAC,CAACC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEFH,EAAE,CAAC,uBAAuB,EAAE,YAAM;MAChCC,MAAM,CAACC,6BAAkB,CAAC,CAACE,IAAI,CAAC,aAAa,CAAC;IAChD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFL,QAAQ,CAAC,gBAAgB,EAAE,YAAM;IAC/BC,EAAE,CAAC,6BAA6B,EAAE,YAAM;MACtCC,MAAM,CAACI,qBAAS,CAACH,kBAAkB,CAAC,CAACE,IAAI,CAAC,aAAa,CAAC;IAC1D,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _EditableHtml = require("../components/EditableHtml");
|
|
9
|
+
describe('Div to Paragraph Conversion', function () {
|
|
10
|
+
it('converts consecutive divs to paragraph with br tags', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
11
|
+
var markup, _render, container, paragraph, br;
|
|
12
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
13
|
+
while (1) switch (_context.prev = _context.next) {
|
|
14
|
+
case 0:
|
|
15
|
+
markup = '<div>A</div><div>B</div>';
|
|
16
|
+
_render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
17
|
+
markup: markup,
|
|
18
|
+
onChange: function onChange() {},
|
|
19
|
+
pluginProps: {}
|
|
20
|
+
})), container = _render.container; // Wait for the editor to initialize
|
|
21
|
+
_context.next = 1;
|
|
22
|
+
return (0, _react2.waitFor)(function () {
|
|
23
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
24
|
+
expect(prosemirror).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
case 1:
|
|
27
|
+
// Check that the content was converted to a paragraph
|
|
28
|
+
paragraph = container.querySelector('.ProseMirror p');
|
|
29
|
+
expect(paragraph).toBeInTheDocument();
|
|
30
|
+
|
|
31
|
+
// Check that br tag is present
|
|
32
|
+
br = container.querySelector('.ProseMirror p br');
|
|
33
|
+
expect(br).toBeInTheDocument();
|
|
34
|
+
|
|
35
|
+
// Verify the text content
|
|
36
|
+
expect(paragraph.textContent).toBe('AB');
|
|
37
|
+
case 2:
|
|
38
|
+
case "end":
|
|
39
|
+
return _context.stop();
|
|
40
|
+
}
|
|
41
|
+
}, _callee);
|
|
42
|
+
})));
|
|
43
|
+
it('converts three consecutive divs correctly', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
44
|
+
var markup, _render2, container, paragraph, brTags;
|
|
45
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
46
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
47
|
+
case 0:
|
|
48
|
+
markup = '<div>First</div><div>Second</div><div>Third</div>';
|
|
49
|
+
_render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
50
|
+
markup: markup,
|
|
51
|
+
onChange: function onChange() {},
|
|
52
|
+
pluginProps: {}
|
|
53
|
+
})), container = _render2.container;
|
|
54
|
+
_context2.next = 1;
|
|
55
|
+
return (0, _react2.waitFor)(function () {
|
|
56
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
57
|
+
expect(prosemirror).toBeInTheDocument();
|
|
58
|
+
});
|
|
59
|
+
case 1:
|
|
60
|
+
paragraph = container.querySelector('.ProseMirror p');
|
|
61
|
+
expect(paragraph).toBeInTheDocument();
|
|
62
|
+
|
|
63
|
+
// Should have 2 br tags (between 3 items)
|
|
64
|
+
brTags = container.querySelectorAll('.ProseMirror p br');
|
|
65
|
+
expect(brTags.length).toBe(2);
|
|
66
|
+
expect(paragraph.textContent).toBe('FirstSecondThird');
|
|
67
|
+
case 2:
|
|
68
|
+
case "end":
|
|
69
|
+
return _context2.stop();
|
|
70
|
+
}
|
|
71
|
+
}, _callee2);
|
|
72
|
+
})));
|
|
73
|
+
it('does not convert single div', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
74
|
+
var markup, _render3, container, div;
|
|
75
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
76
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
77
|
+
case 0:
|
|
78
|
+
markup = '<div>Single</div>';
|
|
79
|
+
_render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
80
|
+
markup: markup,
|
|
81
|
+
onChange: function onChange() {},
|
|
82
|
+
pluginProps: {}
|
|
83
|
+
})), container = _render3.container;
|
|
84
|
+
_context3.next = 1;
|
|
85
|
+
return (0, _react2.waitFor)(function () {
|
|
86
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
87
|
+
expect(prosemirror).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
case 1:
|
|
90
|
+
// Should remain as a div
|
|
91
|
+
div = container.querySelector('.ProseMirror div');
|
|
92
|
+
expect(div).toBeInTheDocument();
|
|
93
|
+
expect(div.textContent).toBe('Single');
|
|
94
|
+
case 2:
|
|
95
|
+
case "end":
|
|
96
|
+
return _context3.stop();
|
|
97
|
+
}
|
|
98
|
+
}, _callee3);
|
|
99
|
+
})));
|
|
100
|
+
it('does not convert divs with attributes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
101
|
+
var markup, _render4, container, divs;
|
|
102
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
103
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
104
|
+
case 0:
|
|
105
|
+
markup = '<div class="test">A</div><div>B</div>';
|
|
106
|
+
_render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
107
|
+
markup: markup,
|
|
108
|
+
onChange: function onChange() {},
|
|
109
|
+
pluginProps: {}
|
|
110
|
+
})), container = _render4.container;
|
|
111
|
+
_context4.next = 1;
|
|
112
|
+
return (0, _react2.waitFor)(function () {
|
|
113
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
114
|
+
expect(prosemirror).toBeInTheDocument();
|
|
115
|
+
});
|
|
116
|
+
case 1:
|
|
117
|
+
// Should remain as divs since one has an attribute
|
|
118
|
+
divs = container.querySelectorAll('.ProseMirror div');
|
|
119
|
+
expect(divs.length).toBeGreaterThanOrEqual(2);
|
|
120
|
+
case 2:
|
|
121
|
+
case "end":
|
|
122
|
+
return _context4.stop();
|
|
123
|
+
}
|
|
124
|
+
}, _callee4);
|
|
125
|
+
})));
|
|
126
|
+
it('handles divs with inline formatting', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
127
|
+
var markup, _render5, container, paragraph, strong, em;
|
|
128
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
129
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
130
|
+
case 0:
|
|
131
|
+
markup = '<div><strong>Bold</strong></div><div><em>Italic</em></div>';
|
|
132
|
+
_render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
133
|
+
markup: markup,
|
|
134
|
+
onChange: function onChange() {},
|
|
135
|
+
pluginProps: {}
|
|
136
|
+
})), container = _render5.container;
|
|
137
|
+
_context5.next = 1;
|
|
138
|
+
return (0, _react2.waitFor)(function () {
|
|
139
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
140
|
+
expect(prosemirror).toBeInTheDocument();
|
|
141
|
+
});
|
|
142
|
+
case 1:
|
|
143
|
+
// Should be converted to paragraph
|
|
144
|
+
paragraph = container.querySelector('.ProseMirror p');
|
|
145
|
+
expect(paragraph).toBeInTheDocument();
|
|
146
|
+
|
|
147
|
+
// Check that formatting is preserved
|
|
148
|
+
strong = container.querySelector('.ProseMirror p strong');
|
|
149
|
+
em = container.querySelector('.ProseMirror p em');
|
|
150
|
+
expect(strong).toBeInTheDocument();
|
|
151
|
+
expect(em).toBeInTheDocument();
|
|
152
|
+
case 2:
|
|
153
|
+
case "end":
|
|
154
|
+
return _context5.stop();
|
|
155
|
+
}
|
|
156
|
+
}, _callee5);
|
|
157
|
+
})));
|
|
158
|
+
it('does not convert mixed element types', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
159
|
+
var markup, _render6, container, div, p;
|
|
160
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
161
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
162
|
+
case 0:
|
|
163
|
+
markup = '<div>A</div><p>B</p>';
|
|
164
|
+
_render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
165
|
+
markup: markup,
|
|
166
|
+
onChange: function onChange() {},
|
|
167
|
+
pluginProps: {}
|
|
168
|
+
})), container = _render6.container;
|
|
169
|
+
_context6.next = 1;
|
|
170
|
+
return (0, _react2.waitFor)(function () {
|
|
171
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
172
|
+
expect(prosemirror).toBeInTheDocument();
|
|
173
|
+
});
|
|
174
|
+
case 1:
|
|
175
|
+
// Should have both div and paragraph
|
|
176
|
+
div = container.querySelector('.ProseMirror div');
|
|
177
|
+
p = container.querySelector('.ProseMirror p');
|
|
178
|
+
expect(div).toBeInTheDocument();
|
|
179
|
+
expect(p).toBeInTheDocument();
|
|
180
|
+
case 2:
|
|
181
|
+
case "end":
|
|
182
|
+
return _context6.stop();
|
|
183
|
+
}
|
|
184
|
+
}, _callee6);
|
|
185
|
+
})));
|
|
186
|
+
it('does not convert divs with nested block elements', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
187
|
+
var markup, _render7, container, divs;
|
|
188
|
+
return _regenerator["default"].wrap(function (_context7) {
|
|
189
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
190
|
+
case 0:
|
|
191
|
+
markup = '<div><div>Nested</div></div><div>B</div>';
|
|
192
|
+
_render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_EditableHtml.EditableHtml, {
|
|
193
|
+
markup: markup,
|
|
194
|
+
onChange: function onChange() {},
|
|
195
|
+
pluginProps: {}
|
|
196
|
+
})), container = _render7.container;
|
|
197
|
+
_context7.next = 1;
|
|
198
|
+
return (0, _react2.waitFor)(function () {
|
|
199
|
+
var prosemirror = container.querySelector('.ProseMirror');
|
|
200
|
+
expect(prosemirror).toBeInTheDocument();
|
|
201
|
+
});
|
|
202
|
+
case 1:
|
|
203
|
+
// Should remain as divs
|
|
204
|
+
divs = container.querySelectorAll('.ProseMirror > div');
|
|
205
|
+
expect(divs.length).toBeGreaterThanOrEqual(1);
|
|
206
|
+
case 2:
|
|
207
|
+
case "end":
|
|
208
|
+
return _context7.stop();
|
|
209
|
+
}
|
|
210
|
+
}, _callee7);
|
|
211
|
+
})));
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=div-to-paragraph-conversion.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"div-to-paragraph-conversion.test.js","names":["_react","_interopRequireDefault","require","_react2","_EditableHtml","describe","it","_asyncToGenerator2","_regenerator","mark","_callee","markup","_render","container","paragraph","br","wrap","_context","prev","next","render","createElement","EditableHtml","onChange","pluginProps","waitFor","prosemirror","querySelector","expect","toBeInTheDocument","textContent","toBe","stop","_callee2","_render2","brTags","_context2","querySelectorAll","length","_callee3","_render3","div","_context3","_callee4","_render4","divs","_context4","toBeGreaterThanOrEqual","_callee5","_render5","strong","em","_context5","_callee6","_render6","p","_context6","_callee7","_render7","_context7"],"sources":["../../src/__tests__/div-to-paragraph-conversion.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, waitFor } from '@testing-library/react';\nimport { EditableHtml } from '../components/EditableHtml';\n\ndescribe('Div to Paragraph Conversion', () => {\n it('converts consecutive divs to paragraph with br tags', async () => {\n const markup = '<div>A</div><div>B</div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n // Wait for the editor to initialize\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Check that the content was converted to a paragraph\n const paragraph = container.querySelector('.ProseMirror p');\n expect(paragraph).toBeInTheDocument();\n\n // Check that br tag is present\n const br = container.querySelector('.ProseMirror p br');\n expect(br).toBeInTheDocument();\n\n // Verify the text content\n expect(paragraph.textContent).toBe('AB');\n });\n\n it('converts three consecutive divs correctly', async () => {\n const markup = '<div>First</div><div>Second</div><div>Third</div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n const paragraph = container.querySelector('.ProseMirror p');\n expect(paragraph).toBeInTheDocument();\n\n // Should have 2 br tags (between 3 items)\n const brTags = container.querySelectorAll('.ProseMirror p br');\n expect(brTags.length).toBe(2);\n\n expect(paragraph.textContent).toBe('FirstSecondThird');\n });\n\n it('does not convert single div', async () => {\n const markup = '<div>Single</div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Should remain as a div\n const div = container.querySelector('.ProseMirror div');\n expect(div).toBeInTheDocument();\n expect(div.textContent).toBe('Single');\n });\n\n it('does not convert divs with attributes', async () => {\n const markup = '<div class=\"test\">A</div><div>B</div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Should remain as divs since one has an attribute\n const divs = container.querySelectorAll('.ProseMirror div');\n expect(divs.length).toBeGreaterThanOrEqual(2);\n });\n\n it('handles divs with inline formatting', async () => {\n const markup = '<div><strong>Bold</strong></div><div><em>Italic</em></div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Should be converted to paragraph\n const paragraph = container.querySelector('.ProseMirror p');\n expect(paragraph).toBeInTheDocument();\n\n // Check that formatting is preserved\n const strong = container.querySelector('.ProseMirror p strong');\n const em = container.querySelector('.ProseMirror p em');\n expect(strong).toBeInTheDocument();\n expect(em).toBeInTheDocument();\n });\n\n it('does not convert mixed element types', async () => {\n const markup = '<div>A</div><p>B</p>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Should have both div and paragraph\n const div = container.querySelector('.ProseMirror div');\n const p = container.querySelector('.ProseMirror p');\n expect(div).toBeInTheDocument();\n expect(p).toBeInTheDocument();\n });\n\n it('does not convert divs with nested block elements', async () => {\n const markup = '<div><div>Nested</div></div><div>B</div>';\n const { container } = render(<EditableHtml markup={markup} onChange={() => {}} pluginProps={{}} />);\n\n await waitFor(() => {\n const prosemirror = container.querySelector('.ProseMirror');\n expect(prosemirror).toBeInTheDocument();\n });\n\n // Should remain as divs\n const divs = container.querySelectorAll('.ProseMirror > div');\n expect(divs.length).toBeGreaterThanOrEqual(1);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extensions = require("../extensions");
|
|
4
|
+
describe('Extensions', function () {
|
|
5
|
+
describe('ALL_PLUGINS', function () {
|
|
6
|
+
it('contains all expected plugins', function () {
|
|
7
|
+
expect(_extensions.ALL_PLUGINS).toContain('bold');
|
|
8
|
+
expect(_extensions.ALL_PLUGINS).toContain('italic');
|
|
9
|
+
expect(_extensions.ALL_PLUGINS).toContain('underline');
|
|
10
|
+
expect(_extensions.ALL_PLUGINS).toContain('strikethrough');
|
|
11
|
+
expect(_extensions.ALL_PLUGINS).toContain('bulleted-list');
|
|
12
|
+
expect(_extensions.ALL_PLUGINS).toContain('numbered-list');
|
|
13
|
+
expect(_extensions.ALL_PLUGINS).toContain('image');
|
|
14
|
+
expect(_extensions.ALL_PLUGINS).toContain('math');
|
|
15
|
+
expect(_extensions.ALL_PLUGINS).toContain('languageCharacters');
|
|
16
|
+
expect(_extensions.ALL_PLUGINS).toContain('text-align');
|
|
17
|
+
expect(_extensions.ALL_PLUGINS).toContain('table');
|
|
18
|
+
expect(_extensions.ALL_PLUGINS).toContain('video');
|
|
19
|
+
expect(_extensions.ALL_PLUGINS).toContain('audio');
|
|
20
|
+
expect(_extensions.ALL_PLUGINS).toContain('responseArea');
|
|
21
|
+
expect(_extensions.ALL_PLUGINS).toContain('superscript');
|
|
22
|
+
expect(_extensions.ALL_PLUGINS).toContain('subscript');
|
|
23
|
+
expect(_extensions.ALL_PLUGINS).toContain('h3');
|
|
24
|
+
expect(_extensions.ALL_PLUGINS).toContain('blockquote');
|
|
25
|
+
expect(_extensions.ALL_PLUGINS).toContain('undo');
|
|
26
|
+
expect(_extensions.ALL_PLUGINS).toContain('redo');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('DEFAULT_PLUGINS', function () {
|
|
30
|
+
it('excludes responseArea, h3, and blockquote', function () {
|
|
31
|
+
expect(_extensions.DEFAULT_PLUGINS).not.toContain('responseArea');
|
|
32
|
+
expect(_extensions.DEFAULT_PLUGINS).not.toContain('h3');
|
|
33
|
+
expect(_extensions.DEFAULT_PLUGINS).not.toContain('blockquote');
|
|
34
|
+
});
|
|
35
|
+
it('contains basic formatting plugins', function () {
|
|
36
|
+
expect(_extensions.DEFAULT_PLUGINS).toContain('bold');
|
|
37
|
+
expect(_extensions.DEFAULT_PLUGINS).toContain('italic');
|
|
38
|
+
expect(_extensions.DEFAULT_PLUGINS).toContain('underline');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('buildExtensions', function () {
|
|
42
|
+
it('returns an array when called with default parameters', function () {
|
|
43
|
+
var result = (0, _extensions.buildExtensions)(_extensions.DEFAULT_PLUGINS, [], {});
|
|
44
|
+
expect(Array.isArray(result)).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('includes only active extensions', function () {
|
|
47
|
+
var activeExtensions = ['bold', 'italic'];
|
|
48
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
49
|
+
expect(result).toEqual(['bold', 'italic']);
|
|
50
|
+
});
|
|
51
|
+
it('filters out undefined values', function () {
|
|
52
|
+
var result = (0, _extensions.buildExtensions)(['bold', 'italic'], [], {});
|
|
53
|
+
expect(result.every(function (item) {
|
|
54
|
+
return item !== undefined;
|
|
55
|
+
})).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it('excludes image plugin when opts.image.onDelete is not provided', function () {
|
|
58
|
+
var activeExtensions = ['image'];
|
|
59
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
60
|
+
expect(result).not.toContain('image');
|
|
61
|
+
});
|
|
62
|
+
it('includes image plugin when opts.image.delete is provided', function () {
|
|
63
|
+
var activeExtensions = ['image'];
|
|
64
|
+
var opts = {
|
|
65
|
+
image: {
|
|
66
|
+
"delete": jest.fn()
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
70
|
+
expect(result).toContain('image');
|
|
71
|
+
});
|
|
72
|
+
it('excludes math plugin when opts.math is not provided', function () {
|
|
73
|
+
var activeExtensions = ['math'];
|
|
74
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
75
|
+
expect(result).not.toContain('math');
|
|
76
|
+
});
|
|
77
|
+
it('includes math plugin when opts.math is provided', function () {
|
|
78
|
+
var activeExtensions = ['math'];
|
|
79
|
+
var opts = {
|
|
80
|
+
math: {}
|
|
81
|
+
};
|
|
82
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
83
|
+
expect(result).toContain('math');
|
|
84
|
+
});
|
|
85
|
+
it('excludes responseArea plugin when opts.responseArea.type is not provided', function () {
|
|
86
|
+
var activeExtensions = ['responseArea'];
|
|
87
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
88
|
+
expect(result).not.toContain('responseArea');
|
|
89
|
+
});
|
|
90
|
+
it('includes responseArea plugin when opts.responseArea.type is provided', function () {
|
|
91
|
+
var activeExtensions = ['responseArea'];
|
|
92
|
+
var opts = {
|
|
93
|
+
responseArea: {
|
|
94
|
+
type: 'explicit-constructed-response'
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
98
|
+
expect(result).toContain('responseArea');
|
|
99
|
+
});
|
|
100
|
+
it('excludes css plugin when opts.extraCSSRules is empty', function () {
|
|
101
|
+
var activeExtensions = ['css'];
|
|
102
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {
|
|
103
|
+
extraCSSRules: {}
|
|
104
|
+
});
|
|
105
|
+
expect(result).not.toContain('css');
|
|
106
|
+
});
|
|
107
|
+
it('includes css plugin when opts.extraCSSRules has values', function () {
|
|
108
|
+
var activeExtensions = ['css'];
|
|
109
|
+
var opts = {
|
|
110
|
+
extraCSSRules: {
|
|
111
|
+
color: 'red'
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
115
|
+
expect(result).toContain('css');
|
|
116
|
+
});
|
|
117
|
+
it('excludes html plugin when opts.html is not provided', function () {
|
|
118
|
+
var activeExtensions = ['html'];
|
|
119
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
120
|
+
expect(result).not.toContain('html');
|
|
121
|
+
});
|
|
122
|
+
it('includes html plugin when opts.html is provided', function () {
|
|
123
|
+
var activeExtensions = ['html'];
|
|
124
|
+
var opts = {
|
|
125
|
+
html: true
|
|
126
|
+
};
|
|
127
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
128
|
+
expect(result).toContain('html');
|
|
129
|
+
});
|
|
130
|
+
it('handles languageCharacters plugins array', function () {
|
|
131
|
+
var activeExtensions = ['languageCharacters'];
|
|
132
|
+
var opts = {
|
|
133
|
+
languageCharacters: [{
|
|
134
|
+
label: 'Greek',
|
|
135
|
+
value: 'greek'
|
|
136
|
+
}, {
|
|
137
|
+
label: 'Cyrillic',
|
|
138
|
+
value: 'cyrillic'
|
|
139
|
+
}]
|
|
140
|
+
};
|
|
141
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], opts);
|
|
142
|
+
// Should include languageCharacters for each item in the array
|
|
143
|
+
var languageCharsCount = result.filter(function (item) {
|
|
144
|
+
return item === 'languageCharacters';
|
|
145
|
+
}).length;
|
|
146
|
+
expect(languageCharsCount).toBe(2);
|
|
147
|
+
});
|
|
148
|
+
it('uses DEFAULT_PLUGINS when activeExtensions is not provided', function () {
|
|
149
|
+
var result = (0, _extensions.buildExtensions)(null, [], {});
|
|
150
|
+
expect(Array.isArray(result)).toBe(true);
|
|
151
|
+
expect(result.length).toBeGreaterThan(0);
|
|
152
|
+
});
|
|
153
|
+
it('includes list plugins', function () {
|
|
154
|
+
var activeExtensions = ['bulleted-list', 'numbered-list'];
|
|
155
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
156
|
+
expect(result).toContain('bulleted-list');
|
|
157
|
+
expect(result).toContain('numbered-list');
|
|
158
|
+
});
|
|
159
|
+
it('includes undo and redo plugins', function () {
|
|
160
|
+
var activeExtensions = ['undo', 'redo'];
|
|
161
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
162
|
+
expect(result).toContain('undo');
|
|
163
|
+
expect(result).toContain('redo');
|
|
164
|
+
});
|
|
165
|
+
it('includes text formatting plugins', function () {
|
|
166
|
+
var activeExtensions = ['superscript', 'subscript', 'strikethrough', 'underline'];
|
|
167
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
168
|
+
expect(result).toContain('superscript');
|
|
169
|
+
expect(result).toContain('subscript');
|
|
170
|
+
expect(result).toContain('strikethrough');
|
|
171
|
+
expect(result).toContain('underline');
|
|
172
|
+
});
|
|
173
|
+
it('includes media plugins', function () {
|
|
174
|
+
var activeExtensions = ['video', 'audio'];
|
|
175
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
176
|
+
expect(result).toContain('video');
|
|
177
|
+
expect(result).toContain('audio');
|
|
178
|
+
});
|
|
179
|
+
it('includes table plugin', function () {
|
|
180
|
+
var activeExtensions = ['table'];
|
|
181
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
182
|
+
expect(result).toContain('table');
|
|
183
|
+
});
|
|
184
|
+
it('includes text-align plugin', function () {
|
|
185
|
+
var activeExtensions = ['text-align'];
|
|
186
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
187
|
+
expect(result).toContain('text-align');
|
|
188
|
+
});
|
|
189
|
+
it('includes blockquote and h3 plugins when in active list', function () {
|
|
190
|
+
var activeExtensions = ['blockquote', 'h3'];
|
|
191
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
192
|
+
expect(result).toContain('blockquote');
|
|
193
|
+
expect(result).toContain('h3');
|
|
194
|
+
});
|
|
195
|
+
it('filters out inactive extensions', function () {
|
|
196
|
+
var activeExtensions = ['bold'];
|
|
197
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
198
|
+
expect(result).not.toContain('italic');
|
|
199
|
+
expect(result).not.toContain('underline');
|
|
200
|
+
});
|
|
201
|
+
it('maintains order of extensions', function () {
|
|
202
|
+
var activeExtensions = ['table', 'bold', 'italic'];
|
|
203
|
+
var result = (0, _extensions.buildExtensions)(activeExtensions, [], {});
|
|
204
|
+
expect(result.indexOf('table')).toBeLessThan(result.indexOf('bold'));
|
|
205
|
+
expect(result.indexOf('bold')).toBeLessThan(result.indexOf('italic'));
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=extensions.test.js.map
|