import React from 'react'; import { orderedList, bulletList, listItem } from '@atlaskit/adf-schema'; import { EditorPlugin } from '../../types'; import ToolbarLists from './ui/ToolbarLists'; import { createPlugin, pluginKey } from './pm-plugins/main'; import inputRulePlugin from './pm-plugins/input-rules'; import keymapPlugin from './pm-plugins/keymap'; import WithPluginState from '../../ui/WithPluginState'; import { messages } from './messages'; import { addAnalytics, ACTION, EVENT_TYPE, INPUT_METHOD, ACTION_SUBJECT, ACTION_SUBJECT_ID, } from '../analytics'; import { tooltip, toggleBulletList, toggleOrderedList } from '../../keymaps'; import { IconList, IconListNumber } from '../quick-insert/assets'; import { ToolbarSize } from '../../ui/Toolbar/types'; const listPlugin = (): EditorPlugin => ({ name: 'list', nodes() { return [ { name: 'bulletList', node: bulletList }, { name: 'orderedList', node: orderedList }, { name: 'listItem', node: listItem }, ]; }, pmPlugins() { return [ { name: 'list', plugin: ({ dispatch }) => createPlugin(dispatch), }, { name: 'listInputRule', plugin: ({ schema, featureFlags }) => inputRulePlugin(schema, featureFlags), }, { name: 'listKeymap', plugin: () => keymapPlugin() }, ]; }, pluginsOptions: { quickInsert: ({ formatMessage }) => [ { id: 'unorderedList', title: formatMessage(messages.unorderedList), description: formatMessage(messages.unorderedListDescription), keywords: ['ul', 'unordered'], priority: 1100, keyshortcut: tooltip(toggleBulletList), icon: () => , action(insert, state) { const tr = insert( state.schema.nodes.bulletList.createChecked( {}, state.schema.nodes.listItem.createChecked( {}, state.schema.nodes.paragraph.createChecked(), ), ), ); return addAnalytics(state, tr, { action: ACTION.INSERTED, actionSubject: ACTION_SUBJECT.LIST, actionSubjectId: ACTION_SUBJECT_ID.FORMAT_LIST_BULLET, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.QUICK_INSERT, }, }); }, }, { id: 'orderedList', title: formatMessage(messages.orderedList), description: formatMessage(messages.orderedListDescription), keywords: ['ol', 'ordered'], priority: 1200, keyshortcut: tooltip(toggleOrderedList), icon: () => , action(insert, state) { const tr = insert( state.schema.nodes.orderedList.createChecked( {}, state.schema.nodes.listItem.createChecked( {}, state.schema.nodes.paragraph.createChecked(), ), ), ); return addAnalytics(state, tr, { action: ACTION.INSERTED, actionSubject: ACTION_SUBJECT.LIST, actionSubjectId: ACTION_SUBJECT_ID.FORMAT_LIST_NUMBER, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.QUICK_INSERT, }, }); }, }, ], }, primaryToolbarComponent({ editorView, popupsMountPoint, popupsBoundariesElement, popupsScrollableElement, toolbarSize, disabled, isToolbarReducedSpacing, }) { const isSmall = toolbarSize < ToolbarSize.L; return ( ( )} /> ); }, }); export default listPlugin;