@atlaskit/editor-common 69.2.2 → 69.3.0
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 +21 -0
- package/analytics/package.json +8 -0
- package/core-utils/package.json +8 -0
- package/dist/cjs/analytics/api.js +5 -0
- package/dist/cjs/analytics/index.js +223 -0
- package/dist/cjs/analytics/types/avatar.js +5 -0
- package/dist/cjs/analytics/types/block.js +5 -0
- package/dist/cjs/analytics/types/config-panel-events.js +5 -0
- package/dist/cjs/analytics/types/cut-copy-events.js +5 -0
- package/dist/cjs/analytics/types/date-events.js +5 -0
- package/dist/cjs/analytics/types/dispatch-analytics-event.js +5 -0
- package/dist/cjs/analytics/types/element-browser-events.js +5 -0
- package/dist/cjs/analytics/types/enums.js +350 -0
- package/dist/cjs/analytics/types/events.js +5 -0
- package/dist/cjs/analytics/types/experimental-events.js +5 -0
- package/dist/cjs/analytics/types/extension-events.js +22 -0
- package/dist/cjs/analytics/types/find-replace-events.js +5 -0
- package/dist/cjs/analytics/types/format-events.js +24 -0
- package/dist/cjs/analytics/types/general-events.js +40 -0
- package/dist/cjs/analytics/types/index.js +249 -0
- package/dist/cjs/analytics/types/inline-comment-events.js +14 -0
- package/dist/cjs/analytics/types/insert-events.js +51 -0
- package/dist/cjs/analytics/types/link-tool-bar-events.js +5 -0
- package/dist/cjs/analytics/types/list-events.js +25 -0
- package/dist/cjs/analytics/types/media-events.js +5 -0
- package/dist/cjs/analytics/types/node-events.js +26 -0
- package/dist/cjs/analytics/types/paste-events.js +55 -0
- package/dist/cjs/analytics/types/performance-report.js +5 -0
- package/dist/cjs/analytics/types/selection-events.js +5 -0
- package/dist/cjs/analytics/types/smart-links.js +19 -0
- package/dist/cjs/analytics/types/substitute-events.js +24 -0
- package/dist/cjs/analytics/types/table-events.js +43 -0
- package/dist/cjs/analytics/types/toolbar-button.js +26 -0
- package/dist/cjs/analytics/types/type-ahead.js +5 -0
- package/dist/cjs/analytics/types/utils.js +28 -0
- package/dist/cjs/core-utils/index.js +13 -0
- package/dist/cjs/core-utils/inside.js +17 -0
- package/dist/cjs/event-dispatcher/index.js +88 -0
- package/dist/cjs/keymaps/consts.js +30 -0
- package/dist/cjs/keymaps/index.js +362 -0
- package/dist/cjs/messages/index.js +137 -1
- package/dist/cjs/messages/insert-block.js +177 -0
- package/dist/cjs/node-width/index.js +85 -0
- package/dist/cjs/react-node-view/index.js +252 -0
- package/dist/cjs/react-node-view/types.js +5 -0
- package/dist/cjs/selection/gap-cursor/selection.js +196 -0
- package/dist/cjs/selection/gap-cursor/utils/index.js +21 -0
- package/dist/cjs/selection/gap-cursor/utils/is-ignored.js +14 -0
- package/dist/cjs/selection/gap-cursor/utils/is-valid-target-node.js +14 -0
- package/dist/cjs/selection/index.js +67 -0
- package/dist/cjs/selection/types.js +15 -0
- package/dist/cjs/selection/utils.js +50 -0
- package/dist/cjs/styles/index.js +29 -1
- package/dist/cjs/styles/shared/extension.js +13 -0
- package/dist/cjs/styles/shared/layout.js +13 -0
- package/dist/cjs/styles/shared/table.js +3 -1
- package/dist/cjs/transforms/expand.js +52 -0
- package/dist/cjs/transforms/extension.js +34 -0
- package/dist/cjs/transforms/index.js +59 -0
- package/dist/cjs/transforms/layout.js +72 -0
- package/dist/cjs/types/command.js +5 -0
- package/dist/cjs/types/context-panel.js +5 -0
- package/dist/cjs/types/editor-actions.js +5 -0
- package/dist/cjs/types/editor-appearance.js +5 -0
- package/dist/cjs/types/editor-container-width.js +5 -0
- package/dist/cjs/types/editor-plugin.js +5 -0
- package/dist/cjs/types/editor-react-context.js +5 -0
- package/dist/cjs/types/empty-state-handler.js +5 -0
- package/dist/cjs/types/feature-flags.js +5 -0
- package/dist/cjs/types/floating-toolbar.js +5 -0
- package/dist/cjs/types/index.js +20 -0
- package/dist/cjs/types/plugin-factory.js +5 -0
- package/dist/cjs/types/prosemirror-config.js +5 -0
- package/dist/cjs/types/quick-insert.js +5 -0
- package/dist/cjs/types/supported-browsers.js +6 -0
- package/dist/cjs/types/toolbar.js +39 -0
- package/dist/cjs/types/ui-components.js +5 -0
- package/dist/cjs/ui/DropList/index.js +217 -0
- package/dist/cjs/ui/ErrorBoundary/index.js +100 -0
- package/dist/cjs/ui/Layer/index.js +245 -0
- package/dist/cjs/ui/Layer/internal/helpers.js +70 -0
- package/dist/cjs/ui/PortalProvider/PortalProviderThemesProvider.js +60 -0
- package/dist/cjs/ui/PortalProvider/index.js +294 -0
- package/dist/cjs/ui-color/ColorPalette/Color/index.js +115 -0
- package/dist/cjs/ui-color/ColorPalette/Color/styles.js +32 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/cellBackgroundColorPalette.js +30 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/common.js +37 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/getColorMessage.js +17 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/index.js +13 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/paletteMessages.js +123 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/panelBackgroundPalette.js +164 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/statusColorPalette.js +72 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/textColorPalette.js +41 -0
- package/dist/cjs/ui-color/ColorPalette/Palettes/type.js +5 -0
- package/dist/cjs/ui-color/ColorPalette/index.js +90 -0
- package/dist/cjs/ui-color/ColorPalette/styles.js +19 -0
- package/dist/cjs/ui-color/index.js +89 -0
- package/dist/cjs/ui-menu/Dropdown/index.js +127 -0
- package/dist/cjs/ui-menu/DropdownMenu/index.js +294 -0
- package/dist/cjs/ui-menu/DropdownMenu/types.js +5 -0
- package/dist/cjs/ui-menu/ToolbarButton/index.js +127 -0
- package/dist/cjs/ui-menu/ToolbarButton/styles.js +26 -0
- package/dist/cjs/ui-menu/index.js +43 -0
- package/dist/cjs/ui-react/ReactEditorViewContext.js +15 -0
- package/dist/cjs/ui-react/index.js +23 -0
- package/dist/cjs/ui-react/with-react-editor-view-outer-listeners.js +159 -0
- package/dist/cjs/utils/dom.js +138 -0
- package/dist/cjs/utils/editor-core-utils.js +108 -0
- package/dist/cjs/utils/index.js +222 -0
- package/dist/cjs/utils/is-text-input.js +31 -0
- package/dist/cjs/utils/nodes.js +134 -0
- package/dist/cjs/utils/plugin-state-factory.js +113 -0
- package/dist/cjs/utils/slice.js +77 -0
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/with-plugin-state/index.js +316 -0
- package/dist/cjs/with-plugin-state/types.js +5 -0
- package/dist/es2019/analytics/api.js +1 -0
- package/dist/es2019/analytics/index.js +1 -0
- package/dist/es2019/analytics/types/avatar.js +1 -0
- package/dist/es2019/analytics/types/block.js +1 -0
- package/dist/es2019/analytics/types/config-panel-events.js +1 -0
- package/dist/es2019/analytics/types/cut-copy-events.js +1 -0
- package/dist/es2019/analytics/types/date-events.js +1 -0
- package/dist/es2019/analytics/types/dispatch-analytics-event.js +1 -0
- package/dist/es2019/analytics/types/element-browser-events.js +1 -0
- package/dist/es2019/analytics/types/enums.js +336 -0
- package/dist/es2019/analytics/types/events.js +1 -0
- package/dist/es2019/analytics/types/experimental-events.js +1 -0
- package/dist/es2019/analytics/types/extension-events.js +13 -0
- package/dist/es2019/analytics/types/find-replace-events.js +1 -0
- package/dist/es2019/analytics/types/format-events.js +16 -0
- package/dist/es2019/analytics/types/general-events.js +30 -0
- package/dist/es2019/analytics/types/index.js +14 -0
- package/dist/es2019/analytics/types/inline-comment-events.js +7 -0
- package/dist/es2019/analytics/types/insert-events.js +41 -0
- package/dist/es2019/analytics/types/link-tool-bar-events.js +1 -0
- package/dist/es2019/analytics/types/list-events.js +17 -0
- package/dist/es2019/analytics/types/media-events.js +1 -0
- package/dist/es2019/analytics/types/node-events.js +18 -0
- package/dist/es2019/analytics/types/paste-events.js +46 -0
- package/dist/es2019/analytics/types/performance-report.js +1 -0
- package/dist/es2019/analytics/types/selection-events.js +1 -0
- package/dist/es2019/analytics/types/smart-links.js +12 -0
- package/dist/es2019/analytics/types/substitute-events.js +16 -0
- package/dist/es2019/analytics/types/table-events.js +34 -0
- package/dist/es2019/analytics/types/toolbar-button.js +19 -0
- package/dist/es2019/analytics/types/type-ahead.js +1 -0
- package/dist/es2019/analytics/types/utils.js +20 -0
- package/dist/es2019/core-utils/index.js +1 -0
- package/dist/es2019/core-utils/inside.js +8 -0
- package/dist/es2019/event-dispatcher/index.js +60 -0
- package/dist/es2019/keymaps/consts.js +12 -0
- package/dist/es2019/keymaps/index.js +186 -0
- package/dist/es2019/messages/index.js +125 -1
- package/dist/es2019/messages/insert-block.js +168 -0
- package/dist/es2019/node-width/index.js +74 -0
- package/dist/es2019/react-node-view/index.js +199 -0
- package/dist/es2019/react-node-view/types.js +1 -0
- package/dist/es2019/selection/gap-cursor/selection.js +136 -0
- package/dist/es2019/selection/gap-cursor/utils/index.js +2 -0
- package/dist/es2019/selection/gap-cursor/utils/is-ignored.js +5 -0
- package/dist/es2019/selection/gap-cursor/utils/is-valid-target-node.js +4 -0
- package/dist/es2019/selection/index.js +4 -0
- package/dist/es2019/selection/types.js +8 -0
- package/dist/es2019/selection/utils.js +38 -0
- package/dist/es2019/styles/index.js +3 -1
- package/dist/es2019/styles/shared/extension.js +3 -0
- package/dist/es2019/styles/shared/layout.js +3 -0
- package/dist/es2019/styles/shared/table.js +3 -1
- package/dist/es2019/transforms/expand.js +36 -0
- package/dist/es2019/transforms/extension.js +26 -0
- package/dist/es2019/transforms/index.js +3 -0
- package/dist/es2019/transforms/layout.js +54 -0
- package/dist/es2019/types/command.js +1 -0
- package/dist/es2019/types/context-panel.js +1 -0
- package/dist/es2019/types/editor-actions.js +1 -0
- package/dist/es2019/types/editor-appearance.js +1 -0
- package/dist/es2019/types/editor-container-width.js +1 -0
- package/dist/es2019/types/editor-plugin.js +1 -0
- package/dist/es2019/types/editor-react-context.js +1 -0
- package/dist/es2019/types/empty-state-handler.js +1 -0
- package/dist/es2019/types/feature-flags.js +1 -0
- package/dist/es2019/types/floating-toolbar.js +1 -0
- package/dist/es2019/types/index.js +2 -1
- package/dist/es2019/types/plugin-factory.js +1 -0
- package/dist/es2019/types/prosemirror-config.js +1 -0
- package/dist/es2019/types/quick-insert.js +1 -0
- package/dist/es2019/types/supported-browsers.js +2 -0
- package/dist/es2019/types/toolbar.js +30 -0
- package/dist/es2019/types/ui-components.js +1 -0
- package/dist/es2019/ui/DropList/index.js +187 -0
- package/dist/es2019/ui/ErrorBoundary/index.js +52 -0
- package/dist/es2019/ui/Layer/index.js +195 -0
- package/dist/es2019/ui/Layer/internal/helpers.js +62 -0
- package/dist/es2019/ui/PortalProvider/PortalProviderThemesProvider.js +43 -0
- package/dist/es2019/ui/PortalProvider/index.js +193 -0
- package/dist/es2019/ui-color/ColorPalette/Color/index.js +72 -0
- package/dist/es2019/ui-color/ColorPalette/Color/styles.js +35 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/cellBackgroundColorPalette.js +15 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/common.js +25 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/getColorMessage.js +14 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/index.js +1 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/paletteMessages.js +113 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/panelBackgroundPalette.js +143 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/statusColorPalette.js +56 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/textColorPalette.js +25 -0
- package/dist/es2019/ui-color/ColorPalette/Palettes/type.js +1 -0
- package/dist/es2019/ui-color/ColorPalette/index.js +68 -0
- package/dist/es2019/ui-color/ColorPalette/styles.js +7 -0
- package/dist/es2019/ui-color/index.js +8 -0
- package/dist/es2019/ui-menu/Dropdown/index.js +83 -0
- package/dist/es2019/ui-menu/DropdownMenu/index.js +244 -0
- package/dist/es2019/ui-menu/DropdownMenu/types.js +1 -0
- package/dist/es2019/ui-menu/ToolbarButton/index.js +94 -0
- package/dist/es2019/ui-menu/ToolbarButton/styles.js +12 -0
- package/dist/es2019/ui-menu/index.js +3 -0
- package/dist/es2019/ui-react/ReactEditorViewContext.js +3 -0
- package/dist/es2019/ui-react/index.js +2 -0
- package/dist/es2019/ui-react/with-react-editor-view-outer-listeners.js +103 -0
- package/dist/es2019/utils/dom.js +113 -0
- package/dist/es2019/utils/editor-core-utils.js +72 -0
- package/dist/es2019/utils/index.js +6 -0
- package/dist/es2019/utils/is-text-input.js +19 -0
- package/dist/es2019/utils/nodes.js +88 -0
- package/dist/es2019/utils/plugin-state-factory.js +107 -0
- package/dist/es2019/utils/slice.js +56 -0
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/with-plugin-state/index.js +263 -0
- package/dist/es2019/with-plugin-state/types.js +1 -0
- package/dist/esm/analytics/api.js +1 -0
- package/dist/esm/analytics/index.js +1 -0
- package/dist/esm/analytics/types/avatar.js +1 -0
- package/dist/esm/analytics/types/block.js +1 -0
- package/dist/esm/analytics/types/config-panel-events.js +1 -0
- package/dist/esm/analytics/types/cut-copy-events.js +1 -0
- package/dist/esm/analytics/types/date-events.js +1 -0
- package/dist/esm/analytics/types/dispatch-analytics-event.js +1 -0
- package/dist/esm/analytics/types/element-browser-events.js +1 -0
- package/dist/esm/analytics/types/enums.js +336 -0
- package/dist/esm/analytics/types/events.js +1 -0
- package/dist/esm/analytics/types/experimental-events.js +1 -0
- package/dist/esm/analytics/types/extension-events.js +13 -0
- package/dist/esm/analytics/types/find-replace-events.js +1 -0
- package/dist/esm/analytics/types/format-events.js +16 -0
- package/dist/esm/analytics/types/general-events.js +30 -0
- package/dist/esm/analytics/types/index.js +14 -0
- package/dist/esm/analytics/types/inline-comment-events.js +7 -0
- package/dist/esm/analytics/types/insert-events.js +41 -0
- package/dist/esm/analytics/types/link-tool-bar-events.js +1 -0
- package/dist/esm/analytics/types/list-events.js +17 -0
- package/dist/esm/analytics/types/media-events.js +1 -0
- package/dist/esm/analytics/types/node-events.js +18 -0
- package/dist/esm/analytics/types/paste-events.js +46 -0
- package/dist/esm/analytics/types/performance-report.js +1 -0
- package/dist/esm/analytics/types/selection-events.js +1 -0
- package/dist/esm/analytics/types/smart-links.js +12 -0
- package/dist/esm/analytics/types/substitute-events.js +16 -0
- package/dist/esm/analytics/types/table-events.js +34 -0
- package/dist/esm/analytics/types/toolbar-button.js +19 -0
- package/dist/esm/analytics/types/type-ahead.js +1 -0
- package/dist/esm/analytics/types/utils.js +20 -0
- package/dist/esm/core-utils/index.js +1 -0
- package/dist/esm/core-utils/inside.js +7 -0
- package/dist/esm/event-dispatcher/index.js +74 -0
- package/dist/esm/keymaps/consts.js +12 -0
- package/dist/esm/keymaps/index.js +184 -0
- package/dist/esm/messages/index.js +125 -1
- package/dist/esm/messages/insert-block.js +168 -0
- package/dist/esm/node-width/index.js +72 -0
- package/dist/esm/react-node-view/index.js +244 -0
- package/dist/esm/react-node-view/types.js +1 -0
- package/dist/esm/selection/gap-cursor/selection.js +176 -0
- package/dist/esm/selection/gap-cursor/utils/index.js +2 -0
- package/dist/esm/selection/gap-cursor/utils/is-ignored.js +5 -0
- package/dist/esm/selection/gap-cursor/utils/is-valid-target-node.js +4 -0
- package/dist/esm/selection/index.js +4 -0
- package/dist/esm/selection/types.js +8 -0
- package/dist/esm/selection/utils.js +38 -0
- package/dist/esm/styles/index.js +3 -1
- package/dist/esm/styles/shared/extension.js +3 -0
- package/dist/esm/styles/shared/layout.js +3 -0
- package/dist/esm/styles/shared/table.js +3 -1
- package/dist/esm/transforms/expand.js +34 -0
- package/dist/esm/transforms/extension.js +24 -0
- package/dist/esm/transforms/index.js +3 -0
- package/dist/esm/transforms/layout.js +58 -0
- package/dist/esm/types/command.js +1 -0
- package/dist/esm/types/context-panel.js +1 -0
- package/dist/esm/types/editor-actions.js +1 -0
- package/dist/esm/types/editor-appearance.js +1 -0
- package/dist/esm/types/editor-container-width.js +1 -0
- package/dist/esm/types/editor-plugin.js +1 -0
- package/dist/esm/types/editor-react-context.js +1 -0
- package/dist/esm/types/empty-state-handler.js +1 -0
- package/dist/esm/types/feature-flags.js +1 -0
- package/dist/esm/types/floating-toolbar.js +1 -0
- package/dist/esm/types/index.js +2 -1
- package/dist/esm/types/plugin-factory.js +1 -0
- package/dist/esm/types/prosemirror-config.js +1 -0
- package/dist/esm/types/quick-insert.js +1 -0
- package/dist/esm/types/supported-browsers.js +2 -0
- package/dist/esm/types/toolbar.js +30 -0
- package/dist/esm/types/ui-components.js +1 -0
- package/dist/esm/ui/DropList/index.js +205 -0
- package/dist/esm/ui/ErrorBoundary/index.js +84 -0
- package/dist/esm/ui/Layer/index.js +228 -0
- package/dist/esm/ui/Layer/internal/helpers.js +62 -0
- package/dist/esm/ui/PortalProvider/PortalProviderThemesProvider.js +43 -0
- package/dist/esm/ui/PortalProvider/index.js +275 -0
- package/dist/esm/ui-color/ColorPalette/Color/index.js +93 -0
- package/dist/esm/ui-color/ColorPalette/Color/styles.js +19 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/cellBackgroundColorPalette.js +15 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/common.js +24 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/getColorMessage.js +10 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/index.js +1 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/paletteMessages.js +113 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/panelBackgroundPalette.js +153 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/statusColorPalette.js +56 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/textColorPalette.js +25 -0
- package/dist/esm/ui-color/ColorPalette/Palettes/type.js +1 -0
- package/dist/esm/ui-color/ColorPalette/index.js +70 -0
- package/dist/esm/ui-color/ColorPalette/styles.js +7 -0
- package/dist/esm/ui-color/index.js +8 -0
- package/dist/esm/ui-menu/Dropdown/index.js +105 -0
- package/dist/esm/ui-menu/DropdownMenu/index.js +265 -0
- package/dist/esm/ui-menu/DropdownMenu/types.js +1 -0
- package/dist/esm/ui-menu/ToolbarButton/index.js +102 -0
- package/dist/esm/ui-menu/ToolbarButton/styles.js +12 -0
- package/dist/esm/ui-menu/index.js +3 -0
- package/dist/esm/ui-react/ReactEditorViewContext.js +3 -0
- package/dist/esm/ui-react/index.js +2 -0
- package/dist/esm/ui-react/with-react-editor-view-outer-listeners.js +138 -0
- package/dist/esm/utils/dom.js +113 -0
- package/dist/esm/utils/editor-core-utils.js +72 -0
- package/dist/esm/utils/index.js +6 -0
- package/dist/esm/utils/is-text-input.js +18 -0
- package/dist/esm/utils/nodes.js +100 -0
- package/dist/esm/utils/plugin-state-factory.js +106 -0
- package/dist/esm/utils/slice.js +59 -0
- package/dist/esm/version.json +1 -1
- package/dist/esm/with-plugin-state/index.js +311 -0
- package/dist/esm/with-plugin-state/types.js +1 -0
- package/dist/types/analytics/api.d.ts +5 -0
- package/dist/types/analytics/index.d.ts +3 -0
- package/dist/types/analytics/types/avatar.d.ts +5 -0
- package/dist/types/analytics/types/block.d.ts +3 -0
- package/dist/types/analytics/types/config-panel-events.d.ts +17 -0
- package/dist/types/analytics/types/cut-copy-events.d.ts +12 -0
- package/dist/types/analytics/types/date-events.d.ts +17 -0
- package/dist/types/analytics/types/dispatch-analytics-event.d.ts +2 -0
- package/dist/types/analytics/types/element-browser-events.d.ts +11 -0
- package/dist/types/analytics/types/enums.d.ts +313 -0
- package/dist/types/analytics/types/events.d.ts +125 -0
- package/dist/types/analytics/types/experimental-events.d.ts +17 -0
- package/dist/types/analytics/types/extension-events.d.ts +37 -0
- package/dist/types/analytics/types/find-replace-events.d.ts +23 -0
- package/dist/types/analytics/types/format-events.d.ts +49 -0
- package/dist/types/analytics/types/general-events.d.ts +179 -0
- package/dist/types/analytics/types/index.d.ts +34 -0
- package/dist/types/analytics/types/inline-comment-events.d.ts +17 -0
- package/dist/types/analytics/types/insert-events.d.ts +128 -0
- package/dist/types/analytics/types/link-tool-bar-events.d.ts +76 -0
- package/dist/types/analytics/types/list-events.d.ts +52 -0
- package/dist/types/analytics/types/media-events.d.ts +16 -0
- package/dist/types/analytics/types/node-events.d.ts +56 -0
- package/dist/types/analytics/types/paste-events.d.ts +39 -0
- package/dist/types/analytics/types/performance-report.d.ts +24 -0
- package/dist/types/analytics/types/selection-events.d.ts +18 -0
- package/dist/types/analytics/types/smart-links.d.ts +13 -0
- package/dist/types/analytics/types/substitute-events.d.ts +26 -0
- package/dist/types/analytics/types/table-events.d.ts +94 -0
- package/dist/types/analytics/types/toolbar-button.d.ts +22 -0
- package/dist/types/analytics/types/type-ahead.d.ts +27 -0
- package/dist/types/analytics/types/utils.d.ts +46 -0
- package/dist/types/core-utils/index.d.ts +1 -0
- package/dist/types/core-utils/inside.d.ts +2 -0
- package/dist/types/event-dispatcher/index.d.ts +19 -0
- package/dist/types/keymaps/consts.d.ts +12 -0
- package/dist/types/keymaps/index.d.ts +89 -0
- package/dist/types/messages/index.d.ts +124 -0
- package/dist/types/messages/insert-block.d.ts +167 -0
- package/dist/types/node-width/index.d.ts +7 -0
- package/dist/types/react-node-view/index.d.ts +52 -0
- package/dist/types/react-node-view/types.d.ts +12 -0
- package/dist/types/selection/gap-cursor/selection.d.ts +40 -0
- package/dist/types/selection/gap-cursor/utils/index.d.ts +2 -0
- package/dist/types/selection/gap-cursor/utils/is-ignored.d.ts +2 -0
- package/dist/types/selection/gap-cursor/utils/is-valid-target-node.d.ts +2 -0
- package/dist/types/selection/index.d.ts +5 -0
- package/dist/types/selection/types.d.ts +26 -0
- package/dist/types/selection/utils.d.ts +4 -0
- package/dist/types/styles/index.d.ts +2 -0
- package/dist/types/styles/shared/extension.d.ts +2 -0
- package/dist/types/styles/shared/layout.d.ts +2 -0
- package/dist/types/styles/shared/table.d.ts +2 -0
- package/dist/types/transforms/expand.d.ts +5 -0
- package/dist/types/transforms/extension.d.ts +6 -0
- package/dist/types/transforms/index.d.ts +3 -0
- package/dist/types/transforms/layout.d.ts +15 -0
- package/dist/types/types/command.d.ts +5 -0
- package/dist/types/types/context-panel.d.ts +3 -0
- package/dist/types/types/editor-actions.d.ts +19 -0
- package/dist/types/types/editor-appearance.d.ts +1 -0
- package/dist/types/types/editor-container-width.d.ts +6 -0
- package/dist/types/types/editor-plugin.d.ts +61 -0
- package/dist/types/types/editor-react-context.d.ts +6 -0
- package/dist/types/types/empty-state-handler.d.ts +7 -0
- package/dist/types/types/feature-flags.d.ts +344 -0
- package/dist/types/types/floating-toolbar.d.ts +183 -0
- package/dist/types/types/index.d.ts +17 -1
- package/dist/types/types/plugin-factory.d.ts +27 -0
- package/dist/types/types/prosemirror-config.d.ts +14 -0
- package/dist/types/types/quick-insert.d.ts +26 -0
- package/dist/types/types/supported-browsers.d.ts +10 -0
- package/dist/types/types/toolbar.d.ts +30 -0
- package/dist/types/types/type-ahead.d.ts +50 -1
- package/dist/types/types/ui-components.d.ts +22 -0
- package/dist/types/ui/DropList/index.d.ts +19 -0
- package/dist/types/ui/ErrorBoundary/index.d.ts +24 -0
- package/dist/types/ui/Layer/index.d.ts +47 -0
- package/dist/types/ui/Layer/internal/helpers.d.ts +5 -0
- package/dist/types/ui/PortalProvider/PortalProviderThemesProvider.d.ts +6 -0
- package/dist/types/ui/PortalProvider/index.d.ts +50 -0
- package/dist/types/ui-color/ColorPalette/Color/index.d.ts +19 -0
- package/dist/types/ui-color/ColorPalette/Color/styles.d.ts +4 -0
- package/dist/types/ui-color/ColorPalette/Palettes/cellBackgroundColorPalette.d.ts +3 -0
- package/dist/types/ui-color/ColorPalette/Palettes/common.d.ts +2 -0
- package/dist/types/ui-color/ColorPalette/Palettes/getColorMessage.d.ts +2 -0
- package/dist/types/ui-color/ColorPalette/Palettes/index.d.ts +2 -0
- package/dist/types/ui-color/ColorPalette/Palettes/paletteMessages.d.ts +113 -0
- package/dist/types/ui-color/ColorPalette/Palettes/panelBackgroundPalette.d.ts +4 -0
- package/dist/types/ui-color/ColorPalette/Palettes/statusColorPalette.d.ts +4 -0
- package/dist/types/ui-color/ColorPalette/Palettes/textColorPalette.d.ts +3 -0
- package/dist/types/ui-color/ColorPalette/Palettes/type.d.ts +8 -0
- package/dist/types/ui-color/ColorPalette/index.d.ts +15 -0
- package/dist/types/ui-color/ColorPalette/styles.d.ts +1 -0
- package/dist/types/ui-color/index.d.ts +9 -0
- package/dist/types/ui-menu/Dropdown/index.d.ts +32 -0
- package/dist/types/ui-menu/DropdownMenu/index.d.ts +19 -0
- package/dist/types/ui-menu/DropdownMenu/types.d.ts +43 -0
- package/dist/types/ui-menu/ToolbarButton/index.d.ts +53 -0
- package/dist/types/ui-menu/ToolbarButton/styles.d.ts +4 -0
- package/dist/types/ui-menu/index.d.ts +5 -0
- package/dist/types/ui-react/ReactEditorViewContext.d.ts +8 -0
- package/dist/types/ui-react/index.d.ts +2 -0
- package/dist/types/ui-react/with-react-editor-view-outer-listeners.d.ts +9 -0
- package/dist/types/utils/dom.d.ts +26 -0
- package/dist/types/utils/editor-core-utils.d.ts +23 -0
- package/dist/types/utils/getModeFromTheme.d.ts +1 -1
- package/dist/types/utils/index.d.ts +9 -0
- package/dist/types/utils/is-text-input.d.ts +2 -0
- package/dist/types/utils/nodes.d.ts +35 -0
- package/dist/types/utils/plugin-state-factory.d.ts +16 -0
- package/dist/types/utils/slice.d.ts +11 -0
- package/dist/types/with-plugin-state/index.d.ts +86 -0
- package/dist/types/with-plugin-state/types.d.ts +10 -0
- package/error-boundary/package.json +8 -0
- package/event-dispatcher/package.json +8 -0
- package/keymaps/package.json +8 -0
- package/node-width/package.json +8 -0
- package/package.json +27 -5
- package/portal-provider/package.json +8 -0
- package/react-node-view/package.json +8 -0
- package/selection/package.json +8 -0
- package/transforms/package.json +8 -0
- package/ui-color/package.json +8 -0
- package/ui-menu/package.json +8 -0
- package/ui-react/package.json +8 -0
- package/with-plugin-state/package.json +8 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walks a DOM tree up to the provided `stopElement`, or if falsy before.
|
|
3
|
+
* @param element
|
|
4
|
+
* @param stopElement
|
|
5
|
+
*/
|
|
6
|
+
export function walkUpTreeUntil(element, shouldStop) {
|
|
7
|
+
let rootElement = element;
|
|
8
|
+
|
|
9
|
+
while (rootElement && rootElement.parentElement && !shouldStop(rootElement)) {
|
|
10
|
+
rootElement = rootElement.parentElement;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return rootElement;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Takes all children out from wrapped el and puts them directly inside
|
|
17
|
+
* the parent el, at the wrapped el's position
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export function unwrap(parent, wrapped) {
|
|
21
|
+
const docsFragment = document.createDocumentFragment();
|
|
22
|
+
Array.from(wrapped.children).forEach(child => {
|
|
23
|
+
docsFragment.appendChild(child);
|
|
24
|
+
});
|
|
25
|
+
parent.replaceChild(docsFragment, wrapped);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Walks up DOM removing elements if they are empty until it finds
|
|
29
|
+
* one that is not
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
export function removeNestedEmptyEls(el) {
|
|
33
|
+
while (el.parentElement && el.childElementCount === 0 && el.textContent === '') {
|
|
34
|
+
const parentEl = el.parentElement;
|
|
35
|
+
parentEl.removeChild(el);
|
|
36
|
+
el = parentEl;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* IE11 doesn't support classList to SVGElements
|
|
41
|
+
**/
|
|
42
|
+
|
|
43
|
+
export const containsClassName = (node, className) => {
|
|
44
|
+
if (!node) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (node.classList && node.classList.contains) {
|
|
49
|
+
return node.classList.contains(className);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!node.className) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const classNames = typeof node.className.baseVal === 'string' ? node.className.baseVal : node.className;
|
|
57
|
+
return classNames.split(' ').indexOf(className) !== -1;
|
|
58
|
+
};
|
|
59
|
+
export function closest(node, s) {
|
|
60
|
+
if (!node) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let el = node;
|
|
65
|
+
|
|
66
|
+
if (!document.documentElement || !document.documentElement.contains(el)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (el.closest) {
|
|
71
|
+
return el.closest(s);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
do {
|
|
75
|
+
const matchfn = el.matches ? el.matches : el.msMatchesSelector;
|
|
76
|
+
|
|
77
|
+
if (matchfn && matchfn.call(el, s)) {
|
|
78
|
+
return el;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
el = el.parentElement || el.parentNode;
|
|
82
|
+
} while (el !== null && el.nodeType === 1);
|
|
83
|
+
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
/*
|
|
87
|
+
* @deprecated - Use HTMLElement.protoype.closest instead
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
export function closestElement(node, s) {
|
|
91
|
+
return closest(node, s);
|
|
92
|
+
}
|
|
93
|
+
export function parsePx(pxStr) {
|
|
94
|
+
if (!pxStr.endsWith('px')) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const maybeNumber = parseInt(pxStr, 10);
|
|
99
|
+
return !Number.isNaN(maybeNumber) ? maybeNumber : undefined;
|
|
100
|
+
}
|
|
101
|
+
// does typescript have function templates yet?
|
|
102
|
+
export function mapElem(elem, callback) {
|
|
103
|
+
const array = [];
|
|
104
|
+
|
|
105
|
+
for (let i = 0; i < elem.childElementCount; i++) {
|
|
106
|
+
array.push(callback(elem.children[i], i, elem));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return array;
|
|
110
|
+
}
|
|
111
|
+
export function maphElem(elem, callback) {
|
|
112
|
+
return mapElem(elem, callback);
|
|
113
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NodeSelection, TextSelection } from 'prosemirror-state';
|
|
2
|
+
import { ReplaceAroundStep, ReplaceStep } from 'prosemirror-transform';
|
|
3
|
+
import { closest } from './dom';
|
|
4
|
+
export const stepHasSlice = step => step && step.hasOwnProperty('slice');
|
|
5
|
+
/**
|
|
6
|
+
* Checks whether a given step is adding nodes of given nodeTypes
|
|
7
|
+
*
|
|
8
|
+
* @param step Step to check
|
|
9
|
+
* @param nodeTypes NodeTypes being added
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export function stepAddsOneOf(step, nodeTypes) {
|
|
13
|
+
let adds = false;
|
|
14
|
+
|
|
15
|
+
if (!stepHasSlice(step)) {
|
|
16
|
+
return adds;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
step.slice.content.descendants(node => {
|
|
20
|
+
if (nodeTypes.has(node.type)) {
|
|
21
|
+
adds = true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return !adds;
|
|
25
|
+
});
|
|
26
|
+
return adds;
|
|
27
|
+
}
|
|
28
|
+
export const extractSliceFromStep = step => {
|
|
29
|
+
if (!(step instanceof ReplaceStep) && !(step instanceof ReplaceAroundStep)) {
|
|
30
|
+
return null;
|
|
31
|
+
} // @ts-ignore This is by design. Slice is a private property, but accesible, from ReplaceStep.
|
|
32
|
+
// However, we need to read it to found if the step was adding a newline
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const slice = step.slice;
|
|
36
|
+
return slice;
|
|
37
|
+
};
|
|
38
|
+
export const isTextSelection = selection => selection instanceof TextSelection;
|
|
39
|
+
export const isElementInTableCell = element => {
|
|
40
|
+
return closest(element, 'td') || closest(element, 'th');
|
|
41
|
+
};
|
|
42
|
+
export const isLastItemMediaGroup = node => {
|
|
43
|
+
const {
|
|
44
|
+
content
|
|
45
|
+
} = node;
|
|
46
|
+
return !!content.lastChild && content.lastChild.type.name === 'mediaGroup';
|
|
47
|
+
}; // TODO: pulled from `packages/editor/editor-core/src/utils/selection.ts`
|
|
48
|
+
|
|
49
|
+
export const setNodeSelection = (view, pos) => {
|
|
50
|
+
const {
|
|
51
|
+
state,
|
|
52
|
+
dispatch
|
|
53
|
+
} = view;
|
|
54
|
+
|
|
55
|
+
if (!isFinite(pos)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const tr = state.tr.setSelection(NodeSelection.create(state.doc, pos));
|
|
60
|
+
dispatch(tr);
|
|
61
|
+
};
|
|
62
|
+
export function nonNullable(value) {
|
|
63
|
+
return value !== null && value !== undefined;
|
|
64
|
+
} // checks if the given position is within the ProseMirror document
|
|
65
|
+
|
|
66
|
+
export const isValidPosition = (pos, state) => {
|
|
67
|
+
if (pos >= 0 && pos <= state.doc.resolve(0).end()) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return false;
|
|
72
|
+
};
|
|
@@ -3,8 +3,13 @@ export { getExtensionLozengeData } from './macro';
|
|
|
3
3
|
export { default as browser } from './browser';
|
|
4
4
|
export { default as ErrorReporter } from './error-reporter';
|
|
5
5
|
export { isPastDate, timestampToIsoFormat, timestampToString, timestampToTaskContext, timestampToUTCDate, todayTimestampInUTC } from './date';
|
|
6
|
+
export { isElementInTableCell, isTextSelection, isLastItemMediaGroup, setNodeSelection, nonNullable, stepAddsOneOf, stepHasSlice, extractSliceFromStep, isValidPosition } from './editor-core-utils';
|
|
6
7
|
export { withImageLoader } from './imageLoader';
|
|
7
8
|
export { absoluteBreakoutWidth, calcBreakoutWidth, calcWideWidth, breakoutConsts } from './breakout';
|
|
9
|
+
export { findChangedNodesFromTransaction, validNode, validateNodes, isType, isParagraph, isText, isLinkMark, SelectedState, isNodeSelectedOrInRange, isSupportedInParent } from './nodes';
|
|
10
|
+
export { pluginFactory } from './plugin-state-factory';
|
|
11
|
+
export { getFragmentBackingArray, mapFragment, mapSlice, flatmap, mapChildren } from './slice';
|
|
12
|
+
export { walkUpTreeUntil, unwrap, removeNestedEmptyEls, containsClassName, closest, closestElement, parsePx, mapElem, maphElem } from './dom';
|
|
8
13
|
export { default as ADFTraversor } from './traversor';
|
|
9
14
|
export { analyticsEventKey, getAnalyticsAppearance, getAnalyticsEventSeverity, SEVERITY, getUnsupportedContentLevelData, UNSUPPORTED_CONTENT_LEVEL_SEVERITY, UNSUPPORTED_CONTENT_LEVEL_SEVERITY_THRESHOLD_DEFAULTS } from './analytics';
|
|
10
15
|
export { findAndTrackUnsupportedContentNodes } from './track-unsupported-content';
|
|
@@ -17,6 +22,7 @@ export { getExtensionRenderer } from './extension-handler';
|
|
|
17
22
|
export { hasMergedCell, calcTableColumnWidths, convertProsemirrorTableNodeToArrayOfRows } from './table';
|
|
18
23
|
export { createCompareNodes } from './compareNodes';
|
|
19
24
|
export { compose } from './compose';
|
|
25
|
+
export { isTextInput } from './is-text-input';
|
|
20
26
|
export { ZERO_WIDTH_SPACE } from './whitespace';
|
|
21
27
|
export { shouldForceTracking } from './should-force-tracking';
|
|
22
28
|
export { getModeFromTheme } from './getModeFromTheme';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// TODO: remove from editor-core utils, re-export from editor-common
|
|
2
|
+
import { ReplaceStep } from 'prosemirror-transform';
|
|
3
|
+
export const isTextInput = tr => {
|
|
4
|
+
const [step] = tr.steps;
|
|
5
|
+
|
|
6
|
+
if (!step || !(step instanceof ReplaceStep)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
slice: {
|
|
12
|
+
content
|
|
13
|
+
},
|
|
14
|
+
from,
|
|
15
|
+
to
|
|
16
|
+
} = step;
|
|
17
|
+
const char = content.firstChild;
|
|
18
|
+
return from === to && content.childCount === 1 && !!char && !!char.text && char.text.length === 1;
|
|
19
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds all top level nodes affected by the transaction
|
|
3
|
+
* Uses from/to positions in transaction's steps to work out which nodes will
|
|
4
|
+
* be changed by the transaction
|
|
5
|
+
*/
|
|
6
|
+
export const findChangedNodesFromTransaction = tr => {
|
|
7
|
+
const nodes = [];
|
|
8
|
+
const steps = tr.steps || [];
|
|
9
|
+
steps.forEach(step => {
|
|
10
|
+
const {
|
|
11
|
+
to,
|
|
12
|
+
from,
|
|
13
|
+
slice
|
|
14
|
+
} = step;
|
|
15
|
+
const size = slice && slice.content ? slice.content.size : 0;
|
|
16
|
+
|
|
17
|
+
for (let i = from; i <= to + size; i++) {
|
|
18
|
+
if (i <= tr.doc.content.size) {
|
|
19
|
+
const topLevelNode = tr.doc.resolve(i).node(1);
|
|
20
|
+
|
|
21
|
+
if (topLevelNode && !nodes.find(n => n === topLevelNode)) {
|
|
22
|
+
nodes.push(topLevelNode);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return nodes;
|
|
28
|
+
};
|
|
29
|
+
export const validNode = node => {
|
|
30
|
+
try {
|
|
31
|
+
node.check(); // this will throw an error if the node is invalid
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true;
|
|
37
|
+
};
|
|
38
|
+
/** Validates prosemirror nodes, and returns true only if all nodes are valid */
|
|
39
|
+
|
|
40
|
+
export const validateNodes = nodes => nodes.every(validNode);
|
|
41
|
+
export const isType = (node, type) => type && node && node.type === type;
|
|
42
|
+
export const isParagraph = (node, schema) => isType(node, schema.nodes.paragraph);
|
|
43
|
+
export const isText = (node, schema) => isType(node, schema.nodes.text);
|
|
44
|
+
export const isLinkMark = (node, schema) => isType(node, schema.marks.link);
|
|
45
|
+
export let SelectedState;
|
|
46
|
+
/**
|
|
47
|
+
* Returns if the current selection from achor-head is selecting the node.
|
|
48
|
+
* If the node is not selected then null is returned.
|
|
49
|
+
* If the node is selected then an enum is returned that describes weather the node
|
|
50
|
+
* is fully selected by a range or if the "inside" of the node has been selected or clicked.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
(function (SelectedState) {
|
|
54
|
+
SelectedState[SelectedState["selectedInRange"] = 0] = "selectedInRange";
|
|
55
|
+
SelectedState[SelectedState["selectedInside"] = 1] = "selectedInside";
|
|
56
|
+
})(SelectedState || (SelectedState = {}));
|
|
57
|
+
|
|
58
|
+
export const isNodeSelectedOrInRange = (anchorPosition, headPosition, nodePosition, nodeSize) => {
|
|
59
|
+
const rangeStart = Math.min(anchorPosition, headPosition);
|
|
60
|
+
const rangeEnd = Math.max(anchorPosition, headPosition);
|
|
61
|
+
const nodeStart = nodePosition;
|
|
62
|
+
const nodeEnd = nodePosition + nodeSize;
|
|
63
|
+
|
|
64
|
+
if (anchorPosition === headPosition) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (rangeStart <= nodeStart && nodeEnd < rangeEnd || rangeStart < nodeStart && nodeEnd <= rangeEnd) {
|
|
69
|
+
return SelectedState.selectedInRange;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (nodeStart <= anchorPosition && headPosition <= nodeEnd) {
|
|
73
|
+
return SelectedState.selectedInside;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return null;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Checks if a particular node fragment is supported in the parent
|
|
80
|
+
* @param state EditorState
|
|
81
|
+
* @param fragment The fragment to be checked for
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
export const isSupportedInParent = (state, fragment, currentAppearance) => {
|
|
85
|
+
const depth = currentAppearance === 'embed' || currentAppearance === 'block' ? undefined : -1;
|
|
86
|
+
const parent = state.selection.$from.node(depth);
|
|
87
|
+
return parent && parent.type.validContent(fragment);
|
|
88
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a ProseMirror plugin's state and handles UI updates.
|
|
3
|
+
*
|
|
4
|
+
* Here's a few things to keep in mind:
|
|
5
|
+
* - plugin's state is stored as a single object
|
|
6
|
+
* - `Reducer` specifies how plugin's state changes in response to commands
|
|
7
|
+
* - `Command` describes only what happen, but not how state changes
|
|
8
|
+
* - `mapping` could be used to map ProseMirror positions stored in plugin's state
|
|
9
|
+
*
|
|
10
|
+
* Example:
|
|
11
|
+
* const { createPluginState, createCommand, getPluginState } = pluginFactory(
|
|
12
|
+
* reducer,
|
|
13
|
+
* pluginKey
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* export const createPlugin = (dispatch: Dispatch, initialState) =>
|
|
17
|
+
* new SafePlugin({
|
|
18
|
+
* state: createPluginState(dispatch, initialState),
|
|
19
|
+
* key: pluginKey
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* Example of a reducer:
|
|
23
|
+
*
|
|
24
|
+
* export const reducer = (
|
|
25
|
+
* state: TablePluginState,
|
|
26
|
+
* action: TableAction,
|
|
27
|
+
* ): TablePluginState => {
|
|
28
|
+
* switch (action.type) {
|
|
29
|
+
* case 'TOGGLE_CONTEXTUAL_MENU':
|
|
30
|
+
* return {
|
|
31
|
+
* ...state,
|
|
32
|
+
* isContextualMenuOpen: !state.isContextualMenuOpen,
|
|
33
|
+
* };
|
|
34
|
+
* default:
|
|
35
|
+
* return state;
|
|
36
|
+
* }
|
|
37
|
+
* };
|
|
38
|
+
*
|
|
39
|
+
*
|
|
40
|
+
* Example of a command:
|
|
41
|
+
*
|
|
42
|
+
* export const toggleContextualMenu = createCommand({
|
|
43
|
+
* type: 'TOGGLE_CONTEXTUAL_MENU',
|
|
44
|
+
* }, tr => tr.setMeta('addToHistory', false));
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
function isFunction(x) {
|
|
48
|
+
return typeof x === 'function';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function pluginFactory(pluginKey, reducer, options = {}) {
|
|
52
|
+
const {
|
|
53
|
+
mapping,
|
|
54
|
+
onDocChanged,
|
|
55
|
+
onSelectionChanged
|
|
56
|
+
} = options;
|
|
57
|
+
return {
|
|
58
|
+
createPluginState(dispatch, initialState) {
|
|
59
|
+
return {
|
|
60
|
+
init: (_, state) => isFunction(initialState) ? initialState(state) : initialState,
|
|
61
|
+
apply: (tr, _pluginState) => {
|
|
62
|
+
const oldState = mapping ? mapping(tr, _pluginState) : _pluginState;
|
|
63
|
+
let newState = oldState;
|
|
64
|
+
const meta = tr.getMeta(pluginKey);
|
|
65
|
+
|
|
66
|
+
if (meta) {
|
|
67
|
+
newState = reducer(oldState, meta);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (onDocChanged && tr.docChanged) {
|
|
71
|
+
newState = onDocChanged(tr, newState);
|
|
72
|
+
} else if (onSelectionChanged && tr.selectionSet) {
|
|
73
|
+
newState = onSelectionChanged(tr, newState);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (newState !== oldState) {
|
|
77
|
+
dispatch(pluginKey, newState);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return newState;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
createCommand(action, transform) {
|
|
86
|
+
return (state, dispatch) => {
|
|
87
|
+
if (dispatch) {
|
|
88
|
+
const tr = transform ? transform(state.tr, state) : state.tr;
|
|
89
|
+
const resolvedAction = isFunction(action) ? action(state) : action;
|
|
90
|
+
|
|
91
|
+
if (tr && resolvedAction) {
|
|
92
|
+
dispatch(tr.setMeta(pluginKey, resolvedAction));
|
|
93
|
+
} else {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return true;
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
getPluginState(state) {
|
|
103
|
+
return pluginKey.getState(state);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Fragment, Slice } from 'prosemirror-model';
|
|
2
|
+
/**
|
|
3
|
+
* A helper to get the underlying array of a fragment.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export function getFragmentBackingArray(fragment) {
|
|
7
|
+
return fragment.content;
|
|
8
|
+
}
|
|
9
|
+
export function mapFragment(content, callback, parent = null) {
|
|
10
|
+
const children = [];
|
|
11
|
+
|
|
12
|
+
for (let i = 0, size = content.childCount; i < size; i++) {
|
|
13
|
+
const node = content.child(i);
|
|
14
|
+
const transformed = node.isLeaf ? callback(node, parent, i) : callback(node.copy(mapFragment(node.content, callback, node)), parent, i);
|
|
15
|
+
|
|
16
|
+
if (transformed) {
|
|
17
|
+
if (transformed instanceof Fragment) {
|
|
18
|
+
children.push(...getFragmentBackingArray(transformed));
|
|
19
|
+
} else if (Array.isArray(transformed)) {
|
|
20
|
+
children.push(...transformed);
|
|
21
|
+
} else {
|
|
22
|
+
children.push(transformed);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return Fragment.fromArray(children);
|
|
28
|
+
}
|
|
29
|
+
export function mapSlice(slice, callback) {
|
|
30
|
+
const fragment = mapFragment(slice.content, callback);
|
|
31
|
+
return new Slice(fragment, slice.openStart, slice.openEnd);
|
|
32
|
+
}
|
|
33
|
+
export function flatmap(fragment, callback) {
|
|
34
|
+
const fragmentContent = [];
|
|
35
|
+
|
|
36
|
+
for (let i = 0; i < fragment.childCount; i++) {
|
|
37
|
+
const child = callback(fragment.child(i), i, fragment);
|
|
38
|
+
|
|
39
|
+
if (Array.isArray(child)) {
|
|
40
|
+
fragmentContent.push(...child);
|
|
41
|
+
} else {
|
|
42
|
+
fragmentContent.push(child);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return Fragment.fromArray(fragmentContent);
|
|
47
|
+
}
|
|
48
|
+
export function mapChildren(node, callback) {
|
|
49
|
+
const array = [];
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
52
|
+
array.push(callback(node.child(i), i, node instanceof Fragment ? node : node.content));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return array;
|
|
56
|
+
}
|
package/dist/es2019/version.json
CHANGED