@atlaskit/editor-plugin-extension 0.4.2 → 0.5.1
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/.eslintrc.js +26 -0
- package/CHANGELOG.md +16 -0
- package/dist/cjs/actions.js +236 -0
- package/dist/cjs/commands.js +122 -0
- package/dist/cjs/context-panel.js +269 -0
- package/dist/cjs/extension-api.js +266 -0
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/plugin-factory.js +32 -0
- package/dist/cjs/plugin-key.js +8 -0
- package/dist/cjs/plugin.js +147 -0
- package/dist/cjs/pm-plugins/keymap.js +21 -0
- package/dist/cjs/pm-plugins/macro/actions.js +186 -0
- package/dist/cjs/pm-plugins/macro/index.js +72 -0
- package/dist/cjs/pm-plugins/macro/plugin-key.js +8 -0
- package/dist/cjs/pm-plugins/macro/types.js +5 -0
- package/dist/cjs/pm-plugins/main.js +323 -0
- package/dist/cjs/pm-plugins/unique-id.js +80 -0
- package/dist/cjs/pm-plugins/utils.js +75 -0
- package/dist/cjs/reducer.js +18 -0
- package/dist/cjs/toolbar.js +242 -0
- package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +475 -0
- package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +122 -0
- package/dist/cjs/ui/ConfigPanel/ConfigPanelLoader.js +23 -0
- package/dist/cjs/ui/ConfigPanel/ErrorMessage/ErrorImage.js +76 -0
- package/dist/cjs/ui/ConfigPanel/ErrorMessage/index.js +33 -0
- package/dist/cjs/ui/ConfigPanel/FieldMessages.js +105 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Boolean.js +150 -0
- package/dist/cjs/ui/ConfigPanel/Fields/CheckboxGroup.js +101 -0
- package/dist/cjs/ui/ConfigPanel/Fields/ColorPicker.js +420 -0
- package/dist/cjs/ui/ConfigPanel/Fields/CustomSelect.js +192 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Date.js +55 -0
- package/dist/cjs/ui/ConfigPanel/Fields/DateRange.js +160 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Enum.js +41 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Expand.js +88 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Fieldset.js +270 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Number.js +64 -0
- package/dist/cjs/ui/ConfigPanel/Fields/RadioGroup.js +56 -0
- package/dist/cjs/ui/ConfigPanel/Fields/Select.js +60 -0
- package/dist/cjs/ui/ConfigPanel/Fields/SelectItem.js +53 -0
- package/dist/cjs/ui/ConfigPanel/Fields/String.js +75 -0
- package/dist/cjs/ui/ConfigPanel/Fields/TabGroup.js +73 -0
- package/dist/cjs/ui/ConfigPanel/Fields/UnhandledType.js +19 -0
- package/dist/cjs/ui/ConfigPanel/Fields/UserSelect.js +268 -0
- package/dist/cjs/ui/ConfigPanel/Fields/common/RequiredIndicator.js +12 -0
- package/dist/cjs/ui/ConfigPanel/FormContent.js +231 -0
- package/dist/cjs/ui/ConfigPanel/FormErrorBoundary.js +140 -0
- package/dist/cjs/ui/ConfigPanel/Header.js +148 -0
- package/dist/cjs/ui/ConfigPanel/LoadingState.js +25 -0
- package/dist/cjs/ui/ConfigPanel/NestedForms/RemovableField.js +61 -0
- package/dist/cjs/ui/ConfigPanel/constants.js +13 -0
- package/dist/cjs/ui/ConfigPanel/index.js +9 -0
- package/dist/cjs/ui/ConfigPanel/messages.js +99 -0
- package/dist/cjs/ui/ConfigPanel/transformers.js +631 -0
- package/dist/cjs/ui/ConfigPanel/types.js +15 -0
- package/dist/cjs/ui/ConfigPanel/use-abortable-effect/index.js +56 -0
- package/dist/cjs/ui/ConfigPanel/use-state-from-promise/index.js +41 -0
- package/dist/cjs/ui/ConfigPanel/utils.js +116 -0
- package/dist/cjs/ui/SaveIndicator/SaveIndicator.js +79 -0
- package/dist/cjs/ui/SaveIndicator/messages.js +14 -0
- package/dist/cjs/ui/SaveIndicator/types.js +5 -0
- package/dist/cjs/utils.js +73 -0
- package/dist/es2019/actions.js +203 -0
- package/dist/es2019/commands.js +99 -0
- package/dist/es2019/context-panel.js +181 -0
- package/dist/es2019/extension-api.js +284 -0
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/plugin-factory.js +26 -0
- package/dist/es2019/plugin-key.js +2 -0
- package/dist/es2019/plugin.js +138 -0
- package/dist/es2019/pm-plugins/keymap.js +15 -0
- package/dist/es2019/pm-plugins/macro/actions.js +152 -0
- package/dist/es2019/pm-plugins/macro/index.js +36 -0
- package/dist/es2019/pm-plugins/macro/plugin-key.js +2 -0
- package/dist/es2019/pm-plugins/macro/types.js +1 -0
- package/dist/es2019/pm-plugins/main.js +230 -0
- package/dist/es2019/pm-plugins/unique-id.js +69 -0
- package/dist/es2019/pm-plugins/utils.js +30 -0
- package/dist/es2019/reducer.js +11 -0
- package/dist/es2019/toolbar.js +236 -0
- package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +415 -0
- package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +100 -0
- package/dist/es2019/ui/ConfigPanel/ConfigPanelLoader.js +7 -0
- package/dist/es2019/ui/ConfigPanel/ErrorMessage/ErrorImage.js +66 -0
- package/dist/es2019/ui/ConfigPanel/ErrorMessage/index.js +25 -0
- package/dist/es2019/ui/ConfigPanel/FieldMessages.js +101 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Boolean.js +138 -0
- package/dist/es2019/ui/ConfigPanel/Fields/CheckboxGroup.js +96 -0
- package/dist/es2019/ui/ConfigPanel/Fields/ColorPicker.js +411 -0
- package/dist/es2019/ui/ConfigPanel/Fields/CustomSelect.js +132 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Date.js +50 -0
- package/dist/es2019/ui/ConfigPanel/Fields/DateRange.js +139 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Enum.js +35 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Expand.js +73 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Fieldset.js +227 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Number.js +61 -0
- package/dist/es2019/ui/ConfigPanel/Fields/RadioGroup.js +40 -0
- package/dist/es2019/ui/ConfigPanel/Fields/Select.js +50 -0
- package/dist/es2019/ui/ConfigPanel/Fields/SelectItem.js +47 -0
- package/dist/es2019/ui/ConfigPanel/Fields/String.js +67 -0
- package/dist/es2019/ui/ConfigPanel/Fields/TabGroup.js +57 -0
- package/dist/es2019/ui/ConfigPanel/Fields/UnhandledType.js +11 -0
- package/dist/es2019/ui/ConfigPanel/Fields/UserSelect.js +194 -0
- package/dist/es2019/ui/ConfigPanel/Fields/common/RequiredIndicator.js +5 -0
- package/dist/es2019/ui/ConfigPanel/FormContent.js +225 -0
- package/dist/es2019/ui/ConfigPanel/FormErrorBoundary.js +100 -0
- package/dist/es2019/ui/ConfigPanel/Header.js +140 -0
- package/dist/es2019/ui/ConfigPanel/LoadingState.js +15 -0
- package/dist/es2019/ui/ConfigPanel/NestedForms/RemovableField.js +52 -0
- package/dist/es2019/ui/ConfigPanel/constants.js +7 -0
- package/dist/es2019/ui/ConfigPanel/index.js +2 -0
- package/dist/es2019/ui/ConfigPanel/messages.js +93 -0
- package/dist/es2019/ui/ConfigPanel/transformers.js +367 -0
- package/dist/es2019/ui/ConfigPanel/types.js +9 -0
- package/dist/es2019/ui/ConfigPanel/use-abortable-effect/index.js +46 -0
- package/dist/es2019/ui/ConfigPanel/use-state-from-promise/index.js +30 -0
- package/dist/es2019/ui/ConfigPanel/utils.js +86 -0
- package/dist/es2019/ui/SaveIndicator/SaveIndicator.js +66 -0
- package/dist/es2019/ui/SaveIndicator/messages.js +8 -0
- package/dist/es2019/ui/SaveIndicator/types.js +1 -0
- package/dist/es2019/utils.js +65 -0
- package/dist/esm/actions.js +223 -0
- package/dist/esm/commands.js +113 -0
- package/dist/esm/context-panel.js +261 -0
- package/dist/esm/extension-api.js +259 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/plugin-factory.js +25 -0
- package/dist/esm/plugin-key.js +2 -0
- package/dist/esm/plugin.js +140 -0
- package/dist/esm/pm-plugins/keymap.js +15 -0
- package/dist/esm/pm-plugins/macro/actions.js +179 -0
- package/dist/esm/pm-plugins/macro/index.js +42 -0
- package/dist/esm/pm-plugins/macro/plugin-key.js +2 -0
- package/dist/esm/pm-plugins/macro/types.js +1 -0
- package/dist/esm/pm-plugins/main.js +298 -0
- package/dist/esm/pm-plugins/unique-id.js +74 -0
- package/dist/esm/pm-plugins/utils.js +68 -0
- package/dist/esm/reducer.js +11 -0
- package/dist/esm/toolbar.js +235 -0
- package/dist/esm/ui/ConfigPanel/ConfigPanel.js +465 -0
- package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +112 -0
- package/dist/esm/ui/ConfigPanel/ConfigPanelLoader.js +11 -0
- package/dist/esm/ui/ConfigPanel/ErrorMessage/ErrorImage.js +68 -0
- package/dist/esm/ui/ConfigPanel/ErrorMessage/index.js +26 -0
- package/dist/esm/ui/ConfigPanel/FieldMessages.js +97 -0
- package/dist/esm/ui/ConfigPanel/Fields/Boolean.js +140 -0
- package/dist/esm/ui/ConfigPanel/Fields/CheckboxGroup.js +95 -0
- package/dist/esm/ui/ConfigPanel/Fields/ColorPicker.js +414 -0
- package/dist/esm/ui/ConfigPanel/Fields/CustomSelect.js +182 -0
- package/dist/esm/ui/ConfigPanel/Fields/Date.js +48 -0
- package/dist/esm/ui/ConfigPanel/Fields/DateRange.js +154 -0
- package/dist/esm/ui/ConfigPanel/Fields/Enum.js +34 -0
- package/dist/esm/ui/ConfigPanel/Fields/Expand.js +77 -0
- package/dist/esm/ui/ConfigPanel/Fields/Fieldset.js +261 -0
- package/dist/esm/ui/ConfigPanel/Fields/Number.js +57 -0
- package/dist/esm/ui/ConfigPanel/Fields/RadioGroup.js +46 -0
- package/dist/esm/ui/ConfigPanel/Fields/Select.js +50 -0
- package/dist/esm/ui/ConfigPanel/Fields/SelectItem.js +45 -0
- package/dist/esm/ui/ConfigPanel/Fields/String.js +65 -0
- package/dist/esm/ui/ConfigPanel/Fields/TabGroup.js +62 -0
- package/dist/esm/ui/ConfigPanel/Fields/UnhandledType.js +10 -0
- package/dist/esm/ui/ConfigPanel/Fields/UserSelect.js +258 -0
- package/dist/esm/ui/ConfigPanel/Fields/common/RequiredIndicator.js +5 -0
- package/dist/esm/ui/ConfigPanel/FormContent.js +223 -0
- package/dist/esm/ui/ConfigPanel/FormErrorBoundary.js +133 -0
- package/dist/esm/ui/ConfigPanel/Header.js +140 -0
- package/dist/esm/ui/ConfigPanel/LoadingState.js +17 -0
- package/dist/esm/ui/ConfigPanel/NestedForms/RemovableField.js +53 -0
- package/dist/esm/ui/ConfigPanel/constants.js +7 -0
- package/dist/esm/ui/ConfigPanel/index.js +2 -0
- package/dist/esm/ui/ConfigPanel/messages.js +93 -0
- package/dist/esm/ui/ConfigPanel/transformers.js +624 -0
- package/dist/esm/ui/ConfigPanel/types.js +9 -0
- package/dist/esm/ui/ConfigPanel/use-abortable-effect/index.js +49 -0
- package/dist/esm/ui/ConfigPanel/use-state-from-promise/index.js +34 -0
- package/dist/esm/ui/ConfigPanel/utils.js +109 -0
- package/dist/esm/ui/SaveIndicator/SaveIndicator.js +72 -0
- package/dist/esm/ui/SaveIndicator/messages.js +8 -0
- package/dist/esm/ui/SaveIndicator/types.js +1 -0
- package/dist/esm/utils.js +67 -0
- package/dist/types/actions.d.ts +20 -0
- package/dist/types/commands.d.ts +15 -0
- package/dist/types/context-panel.d.ts +10 -0
- package/dist/types/extension-api.d.ts +12 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/plugin-factory.d.ts +4 -0
- package/dist/types/plugin-key.d.ts +3 -0
- package/dist/types/plugin.d.ts +2 -0
- package/dist/types/pm-plugins/keymap.d.ts +3 -0
- package/dist/types/pm-plugins/macro/actions.d.ts +9 -0
- package/dist/types/pm-plugins/macro/index.d.ts +8 -0
- package/dist/types/pm-plugins/macro/plugin-key.d.ts +3 -0
- package/dist/types/pm-plugins/macro/types.d.ts +4 -0
- package/dist/types/pm-plugins/main.d.ts +25 -0
- package/dist/types/pm-plugins/unique-id.d.ts +3 -0
- package/dist/types/pm-plugins/utils.d.ts +3 -0
- package/dist/types/reducer.d.ts +2 -0
- package/dist/types/toolbar.d.ts +44 -0
- package/dist/types/types.d.ts +27 -2
- package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +22 -0
- package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +21 -0
- package/dist/types/ui/ConfigPanel/ConfigPanelLoader.d.ts +5 -0
- package/dist/types/ui/ConfigPanel/ErrorMessage/ErrorImage.d.ts +4 -0
- package/dist/types/ui/ConfigPanel/ErrorMessage/index.d.ts +10 -0
- package/dist/types/ui/ConfigPanel/FieldMessages.d.ts +12 -0
- package/dist/types/ui/ConfigPanel/Fields/Boolean.d.ts +8 -0
- package/dist/types/ui/ConfigPanel/Fields/CheckboxGroup.d.ts +8 -0
- package/dist/types/ui/ConfigPanel/Fields/ColorPicker.d.ts +20 -0
- package/dist/types/ui/ConfigPanel/Fields/CustomSelect.d.ts +24 -0
- package/dist/types/ui/ConfigPanel/Fields/Date.d.ts +20 -0
- package/dist/types/ui/ConfigPanel/Fields/DateRange.d.ts +20 -0
- package/dist/types/ui/ConfigPanel/Fields/Enum.d.ts +10 -0
- package/dist/types/ui/ConfigPanel/Fields/Expand.d.ts +16 -0
- package/dist/types/ui/ConfigPanel/Fields/Fieldset.d.ts +19 -0
- package/dist/types/ui/ConfigPanel/Fields/Number.d.ts +10 -0
- package/dist/types/ui/ConfigPanel/Fields/RadioGroup.d.ts +8 -0
- package/dist/types/ui/ConfigPanel/Fields/Select.d.ts +11 -0
- package/dist/types/ui/ConfigPanel/Fields/SelectItem.d.ts +5 -0
- package/dist/types/ui/ConfigPanel/Fields/String.d.ts +10 -0
- package/dist/types/ui/ConfigPanel/Fields/TabGroup.d.ts +14 -0
- package/dist/types/ui/ConfigPanel/Fields/UnhandledType.d.ts +6 -0
- package/dist/types/ui/ConfigPanel/Fields/UserSelect.d.ts +10 -0
- package/dist/types/ui/ConfigPanel/Fields/common/RequiredIndicator.d.ts +1 -0
- package/dist/types/ui/ConfigPanel/FormContent.d.ts +4 -0
- package/dist/types/ui/ConfigPanel/FormErrorBoundary.d.ts +16 -0
- package/dist/types/ui/ConfigPanel/Header.d.ts +23 -0
- package/dist/types/ui/ConfigPanel/LoadingState.d.ts +4 -0
- package/dist/types/ui/ConfigPanel/NestedForms/RemovableField.d.ts +19 -0
- package/dist/types/ui/ConfigPanel/constants.d.ts +2 -0
- package/dist/types/ui/ConfigPanel/index.d.ts +2 -0
- package/dist/types/ui/ConfigPanel/messages.d.ts +92 -0
- package/dist/types/ui/ConfigPanel/transformers.d.ts +9 -0
- package/dist/types/ui/ConfigPanel/types.d.ts +36 -0
- package/dist/types/ui/ConfigPanel/use-abortable-effect/index.d.ts +16 -0
- package/dist/types/ui/ConfigPanel/use-state-from-promise/index.d.ts +15 -0
- package/dist/types/ui/ConfigPanel/utils.d.ts +16 -0
- package/dist/types/ui/SaveIndicator/SaveIndicator.d.ts +4 -0
- package/dist/types/ui/SaveIndicator/messages.d.ts +7 -0
- package/dist/types/ui/SaveIndicator/types.d.ts +11 -0
- package/dist/types/utils.d.ts +15 -0
- package/dist/types-ts4.5/actions.d.ts +20 -0
- package/dist/types-ts4.5/commands.d.ts +15 -0
- package/dist/types-ts4.5/context-panel.d.ts +10 -0
- package/dist/types-ts4.5/extension-api.d.ts +12 -0
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/plugin-factory.d.ts +4 -0
- package/dist/types-ts4.5/plugin-key.d.ts +3 -0
- package/dist/types-ts4.5/plugin.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/keymap.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/macro/actions.d.ts +9 -0
- package/dist/types-ts4.5/pm-plugins/macro/index.d.ts +8 -0
- package/dist/types-ts4.5/pm-plugins/macro/plugin-key.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/macro/types.d.ts +4 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +25 -0
- package/dist/types-ts4.5/pm-plugins/unique-id.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/utils.d.ts +3 -0
- package/dist/types-ts4.5/reducer.d.ts +2 -0
- package/dist/types-ts4.5/toolbar.d.ts +44 -0
- package/dist/types-ts4.5/types.d.ts +27 -2
- package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanel.d.ts +22 -0
- package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +21 -0
- package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelLoader.d.ts +5 -0
- package/dist/types-ts4.5/ui/ConfigPanel/ErrorMessage/ErrorImage.d.ts +4 -0
- package/dist/types-ts4.5/ui/ConfigPanel/ErrorMessage/index.d.ts +10 -0
- package/dist/types-ts4.5/ui/ConfigPanel/FieldMessages.d.ts +12 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Boolean.d.ts +8 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/CheckboxGroup.d.ts +8 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/ColorPicker.d.ts +20 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/CustomSelect.d.ts +24 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Date.d.ts +20 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/DateRange.d.ts +20 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Enum.d.ts +10 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Expand.d.ts +16 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Fieldset.d.ts +19 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Number.d.ts +10 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/RadioGroup.d.ts +8 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/Select.d.ts +11 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/SelectItem.d.ts +5 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/String.d.ts +10 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/TabGroup.d.ts +14 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/UnhandledType.d.ts +6 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/UserSelect.d.ts +10 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Fields/common/RequiredIndicator.d.ts +1 -0
- package/dist/types-ts4.5/ui/ConfigPanel/FormContent.d.ts +4 -0
- package/dist/types-ts4.5/ui/ConfigPanel/FormErrorBoundary.d.ts +16 -0
- package/dist/types-ts4.5/ui/ConfigPanel/Header.d.ts +23 -0
- package/dist/types-ts4.5/ui/ConfigPanel/LoadingState.d.ts +4 -0
- package/dist/types-ts4.5/ui/ConfigPanel/NestedForms/RemovableField.d.ts +19 -0
- package/dist/types-ts4.5/ui/ConfigPanel/constants.d.ts +2 -0
- package/dist/types-ts4.5/ui/ConfigPanel/index.d.ts +2 -0
- package/dist/types-ts4.5/ui/ConfigPanel/messages.d.ts +92 -0
- package/dist/types-ts4.5/ui/ConfigPanel/transformers.d.ts +9 -0
- package/dist/types-ts4.5/ui/ConfigPanel/types.d.ts +39 -0
- package/dist/types-ts4.5/ui/ConfigPanel/use-abortable-effect/index.d.ts +16 -0
- package/dist/types-ts4.5/ui/ConfigPanel/use-state-from-promise/index.d.ts +18 -0
- package/dist/types-ts4.5/ui/ConfigPanel/utils.d.ts +16 -0
- package/dist/types-ts4.5/ui/SaveIndicator/SaveIndicator.d.ts +4 -0
- package/dist/types-ts4.5/ui/SaveIndicator/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/SaveIndicator/types.d.ts +11 -0
- package/dist/types-ts4.5/utils.d.ts +15 -0
- package/example-utils/config-panel/ConfigPanelWithExtensionPicker.tsx +217 -0
- package/example-utils/config-panel/ConfigPanelWithProviders.tsx +51 -0
- package/example-utils/config-panel/ExtensionNodePicker.tsx +141 -0
- package/example-utils/config-panel/FieldTypePicker.tsx +63 -0
- package/example-utils/config-panel/example-manifest-all-fields.ts +86 -0
- package/example-utils/config-panel/example-manifest-individual-fields.ts +85 -0
- package/example-utils/config-panel/fields.ts +611 -0
- package/package.json +49 -7
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
2
|
+
import { removeConnectedNodes } from '@atlaskit/editor-common/utils';
|
|
3
|
+
import { findParentNodeOfType, removeParentNodeOfType, removeSelectedNode } from '@atlaskit/editor-prosemirror/utils';
|
|
4
|
+
import { createCommand } from './plugin-factory';
|
|
5
|
+
import { getSelectedExtension } from './utils';
|
|
6
|
+
|
|
7
|
+
// AFP-2532 TODO: Fix automatic suppressions below
|
|
8
|
+
// eslint-disable-next-line @atlassian/tangerine/import/entry-points
|
|
9
|
+
|
|
10
|
+
export function updateState(state) {
|
|
11
|
+
return createCommand({
|
|
12
|
+
type: 'UPDATE_STATE',
|
|
13
|
+
data: state
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function setEditingContextToContextPanel(processParametersBefore, processParametersAfter, applyChangeToContextPanel) {
|
|
17
|
+
return createCommand({
|
|
18
|
+
type: 'UPDATE_STATE',
|
|
19
|
+
data: {
|
|
20
|
+
showContextPanel: true,
|
|
21
|
+
processParametersBefore,
|
|
22
|
+
processParametersAfter
|
|
23
|
+
}
|
|
24
|
+
}, applyChangeToContextPanel);
|
|
25
|
+
}
|
|
26
|
+
export const clearEditingContext = applyChangeToContextPanel => createCommand({
|
|
27
|
+
type: 'UPDATE_STATE',
|
|
28
|
+
data: {
|
|
29
|
+
showContextPanel: false,
|
|
30
|
+
processParametersBefore: undefined,
|
|
31
|
+
processParametersAfter: undefined
|
|
32
|
+
}
|
|
33
|
+
}, applyChangeToContextPanel);
|
|
34
|
+
export const forceAutoSave = applyChangeToContextPanel => (resolve, reject) => createCommand({
|
|
35
|
+
type: 'UPDATE_STATE',
|
|
36
|
+
data: {
|
|
37
|
+
autoSaveResolve: resolve,
|
|
38
|
+
autoSaveReject: reject
|
|
39
|
+
}
|
|
40
|
+
}, applyChangeToContextPanel);
|
|
41
|
+
export const updateExtensionLayout = layout => createCommand({
|
|
42
|
+
type: 'UPDATE_STATE',
|
|
43
|
+
data: {
|
|
44
|
+
layout
|
|
45
|
+
}
|
|
46
|
+
}, (tr, state) => {
|
|
47
|
+
const selectedExtension = getSelectedExtension(state, true);
|
|
48
|
+
if (selectedExtension) {
|
|
49
|
+
const trWithNewNodeMarkup = tr.setNodeMarkup(selectedExtension.pos, undefined, {
|
|
50
|
+
...selectedExtension.node.attrs,
|
|
51
|
+
layout
|
|
52
|
+
});
|
|
53
|
+
trWithNewNodeMarkup.setMeta('scrollIntoView', false);
|
|
54
|
+
return trWithNewNodeMarkup;
|
|
55
|
+
}
|
|
56
|
+
return tr;
|
|
57
|
+
});
|
|
58
|
+
export const removeExtension = editorAnalyticsAPI => createCommand({
|
|
59
|
+
type: 'UPDATE_STATE',
|
|
60
|
+
data: {
|
|
61
|
+
element: undefined
|
|
62
|
+
}
|
|
63
|
+
}, (tr, state) => {
|
|
64
|
+
if (getSelectedExtension(state)) {
|
|
65
|
+
return removeSelectedNode(tr);
|
|
66
|
+
} else {
|
|
67
|
+
return checkAndRemoveExtensionNode(state, tr, editorAnalyticsAPI);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
export const removeDescendantNodes = sourceNode => createCommand({
|
|
71
|
+
type: 'UPDATE_STATE',
|
|
72
|
+
data: {
|
|
73
|
+
element: undefined
|
|
74
|
+
}
|
|
75
|
+
}, (tr, state) => {
|
|
76
|
+
return sourceNode ? removeConnectedNodes(state, sourceNode) : tr;
|
|
77
|
+
});
|
|
78
|
+
export const checkAndRemoveExtensionNode = (state, tr, analyticsApi) => {
|
|
79
|
+
let nodeType = state.schema.nodes.bodiedExtension;
|
|
80
|
+
const maybeMBENode = findParentNodeOfType(state.schema.nodes.multiBodiedExtension)(state.selection);
|
|
81
|
+
if (maybeMBENode) {
|
|
82
|
+
nodeType = state.schema.nodes.multiBodiedExtension;
|
|
83
|
+
if (analyticsApi) {
|
|
84
|
+
analyticsApi.attachAnalyticsEvent({
|
|
85
|
+
action: ACTION.DELETED,
|
|
86
|
+
actionSubject: ACTION_SUBJECT.MULTI_BODIED_EXTENSION,
|
|
87
|
+
eventType: EVENT_TYPE.TRACK,
|
|
88
|
+
attributes: {
|
|
89
|
+
extensionType: maybeMBENode.node.attrs.extensionType,
|
|
90
|
+
extensionKey: maybeMBENode.node.attrs.extensionKey,
|
|
91
|
+
localId: maybeMBENode.node.attrs.localId,
|
|
92
|
+
maxFramesCount: maybeMBENode.node.attrs.maxFrames,
|
|
93
|
+
currentFramesCount: maybeMBENode.node.content.childCount
|
|
94
|
+
}
|
|
95
|
+
})(tr);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return removeParentNodeOfType(nodeType)(tr);
|
|
99
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { getExtensionKeyAndNodeKey } from '@atlaskit/editor-common/extensions';
|
|
3
|
+
import { GapCursorSelection } from '@atlaskit/editor-common/selection';
|
|
4
|
+
import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
5
|
+
import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
|
|
6
|
+
import { buildExtensionNode } from './actions';
|
|
7
|
+
import { clearEditingContext, forceAutoSave, updateState } from './commands';
|
|
8
|
+
import { getPluginState } from './pm-plugins/main';
|
|
9
|
+
import ConfigPanelLoader from './ui/ConfigPanel/ConfigPanelLoader';
|
|
10
|
+
import { SaveIndicator } from './ui/SaveIndicator/SaveIndicator';
|
|
11
|
+
import { getSelectedExtension } from './utils';
|
|
12
|
+
const areParametersEqual = (firstParameters, secondParameters) => {
|
|
13
|
+
if (typeof firstParameters === 'object' && typeof secondParameters === 'object' && firstParameters !== null && secondParameters !== null) {
|
|
14
|
+
const firstKeys = Object.keys(firstParameters);
|
|
15
|
+
const secondKeys = Object.keys(secondParameters);
|
|
16
|
+
return firstKeys.length === secondKeys.length && firstKeys.every(key => firstParameters[key] === secondParameters[key]);
|
|
17
|
+
}
|
|
18
|
+
return firstParameters === secondParameters;
|
|
19
|
+
};
|
|
20
|
+
export const duplicateSelection = (selectionToDuplicate, doc) => {
|
|
21
|
+
if (selectionToDuplicate instanceof NodeSelection) {
|
|
22
|
+
return NodeSelection.create(doc, selectionToDuplicate.from);
|
|
23
|
+
} else if (selectionToDuplicate instanceof TextSelection) {
|
|
24
|
+
return TextSelection.create(doc, selectionToDuplicate.from, selectionToDuplicate.to);
|
|
25
|
+
} else if (selectionToDuplicate instanceof GapCursorSelection) {
|
|
26
|
+
return new GapCursorSelection(doc.resolve(selectionToDuplicate.from), selectionToDuplicate.side);
|
|
27
|
+
} else if (selectionToDuplicate instanceof CellSelection) {
|
|
28
|
+
return new CellSelection(doc.resolve(selectionToDuplicate.$anchorCell.pos), doc.resolve(selectionToDuplicate.$headCell.pos));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export const getContextPanel = getEditorView => (allowAutoSave, featureFlags, applyChange) => state => {
|
|
32
|
+
const nodeWithPos = getSelectedExtension(state, true);
|
|
33
|
+
|
|
34
|
+
// Adding checks to bail out early
|
|
35
|
+
if (!nodeWithPos) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const extensionState = getPluginState(state);
|
|
39
|
+
const {
|
|
40
|
+
autoSaveResolve,
|
|
41
|
+
autoSaveReject,
|
|
42
|
+
showContextPanel,
|
|
43
|
+
extensionProvider,
|
|
44
|
+
processParametersBefore,
|
|
45
|
+
processParametersAfter
|
|
46
|
+
} = extensionState;
|
|
47
|
+
if (extensionState && showContextPanel && extensionProvider && processParametersAfter) {
|
|
48
|
+
const {
|
|
49
|
+
extensionType,
|
|
50
|
+
extensionKey,
|
|
51
|
+
parameters
|
|
52
|
+
} = nodeWithPos.node.attrs;
|
|
53
|
+
const [extKey, nodeKey] = getExtensionKeyAndNodeKey(extensionKey, extensionType);
|
|
54
|
+
const configParams = processParametersBefore ? processParametersBefore(parameters || {}) : parameters;
|
|
55
|
+
return /*#__PURE__*/React.createElement(SaveIndicator, {
|
|
56
|
+
duration: 5000,
|
|
57
|
+
visible: allowAutoSave
|
|
58
|
+
}, ({
|
|
59
|
+
onSaveStarted,
|
|
60
|
+
onSaveEnded
|
|
61
|
+
}) => {
|
|
62
|
+
const editorView = getEditorView === null || getEditorView === void 0 ? void 0 : getEditorView();
|
|
63
|
+
if (!editorView) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return /*#__PURE__*/React.createElement(ConfigPanelLoader, {
|
|
67
|
+
showHeader: true,
|
|
68
|
+
closeOnEsc: true,
|
|
69
|
+
extensionType: extensionType,
|
|
70
|
+
extensionKey: extKey,
|
|
71
|
+
nodeKey: nodeKey,
|
|
72
|
+
extensionParameters: parameters,
|
|
73
|
+
parameters: configParams,
|
|
74
|
+
extensionProvider: extensionProvider,
|
|
75
|
+
autoSave: allowAutoSave,
|
|
76
|
+
autoSaveTrigger: autoSaveResolve,
|
|
77
|
+
autoSaveReject: autoSaveReject,
|
|
78
|
+
onChange: async updatedParameters => {
|
|
79
|
+
await onChangeAction(editorView, updatedParameters, parameters, nodeWithPos, onSaveStarted);
|
|
80
|
+
onSaveEnded();
|
|
81
|
+
if (autoSaveResolve) {
|
|
82
|
+
autoSaveResolve();
|
|
83
|
+
}
|
|
84
|
+
if (!allowAutoSave) {
|
|
85
|
+
clearEditingContext(applyChange)(editorView.state, editorView.dispatch);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
onCancel: async () => {
|
|
89
|
+
if (allowAutoSave) {
|
|
90
|
+
try {
|
|
91
|
+
await new Promise((resolve, reject) => {
|
|
92
|
+
forceAutoSave(applyChange)(resolve, reject)(editorView.state, editorView.dispatch);
|
|
93
|
+
});
|
|
94
|
+
} catch (e) {
|
|
95
|
+
// Even if the save failed, we should proceed with closing the panel
|
|
96
|
+
// eslint-disable-next-line no-console
|
|
97
|
+
console.error(`Autosave failed with error`, e);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
clearEditingContext(applyChange)(editorView.state, editorView.dispatch);
|
|
101
|
+
},
|
|
102
|
+
featureFlags: featureFlags
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
export async function onChangeAction(editorView, updatedParameters = {}, oldParameters = {}, nodeWithPos, onSaving) {
|
|
108
|
+
// WARNING: editorView.state stales quickly, do not unpack
|
|
109
|
+
const {
|
|
110
|
+
processParametersAfter,
|
|
111
|
+
processParametersBefore
|
|
112
|
+
} = getPluginState(editorView.state);
|
|
113
|
+
if (!processParametersAfter) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const unwrappedOldParameters = processParametersBefore ? processParametersBefore(oldParameters) : oldParameters;
|
|
117
|
+
// todo: update to only check parameters which are in the manifest's field definitions
|
|
118
|
+
if (areParametersEqual(unwrappedOldParameters, updatedParameters)) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (onSaving) {
|
|
122
|
+
onSaving();
|
|
123
|
+
}
|
|
124
|
+
const key = Date.now();
|
|
125
|
+
const {
|
|
126
|
+
positions: previousPositions
|
|
127
|
+
} = getPluginState(editorView.state);
|
|
128
|
+
await updateState({
|
|
129
|
+
positions: {
|
|
130
|
+
...previousPositions,
|
|
131
|
+
[key]: nodeWithPos.pos
|
|
132
|
+
}
|
|
133
|
+
})(editorView.state, editorView.dispatch);
|
|
134
|
+
|
|
135
|
+
// WARNING: after this, editorView.state may have changed
|
|
136
|
+
const newParameters = await processParametersAfter(updatedParameters);
|
|
137
|
+
const {
|
|
138
|
+
positions
|
|
139
|
+
} = getPluginState(editorView.state);
|
|
140
|
+
if (!positions) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (!(key in positions)) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const {
|
|
147
|
+
node
|
|
148
|
+
} = nodeWithPos;
|
|
149
|
+
const newNode = buildExtensionNode(nodeWithPos.node.toJSON().type, editorView.state.schema, {
|
|
150
|
+
...node.attrs,
|
|
151
|
+
parameters: {
|
|
152
|
+
...oldParameters,
|
|
153
|
+
...newParameters
|
|
154
|
+
}
|
|
155
|
+
}, node.content, node.marks);
|
|
156
|
+
if (!newNode) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const positionUpdated = positions[key];
|
|
160
|
+
const transaction = editorView.state.tr.replaceWith(positionUpdated, positionUpdated + newNode.nodeSize, newNode);
|
|
161
|
+
|
|
162
|
+
// Ensure we preserve the selection, tr.replaceWith causes it to be lost in some cases
|
|
163
|
+
// when replacing the node
|
|
164
|
+
const {
|
|
165
|
+
selection: prevSelection
|
|
166
|
+
} = editorView.state;
|
|
167
|
+
if (!prevSelection.eq(transaction.selection)) {
|
|
168
|
+
const selection = duplicateSelection(prevSelection, transaction.doc);
|
|
169
|
+
if (selection) {
|
|
170
|
+
transaction.setSelection(selection);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const positionsLess = {
|
|
174
|
+
...getPluginState(editorView.state).positions
|
|
175
|
+
};
|
|
176
|
+
delete positionsLess[key];
|
|
177
|
+
await updateState({
|
|
178
|
+
positions: positionsLess
|
|
179
|
+
})(editorView.state, editorView.dispatch);
|
|
180
|
+
editorView.dispatch(transaction);
|
|
181
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { validator } from '@atlaskit/adf-utils/validator';
|
|
2
|
+
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
3
|
+
import { nodeToJSON } from '@atlaskit/editor-common/utils';
|
|
4
|
+
import { JSONTransformer } from '@atlaskit/editor-json-transformer';
|
|
5
|
+
import { Fragment, Mark } from '@atlaskit/editor-prosemirror/model';
|
|
6
|
+
import { NodeSelection, Selection } from '@atlaskit/editor-prosemirror/state';
|
|
7
|
+
import { setTextSelection } from '@atlaskit/editor-prosemirror/utils';
|
|
8
|
+
import { setEditingContextToContextPanel } from './commands';
|
|
9
|
+
import { insertMacroFromMacroBrowser } from './pm-plugins/macro/actions';
|
|
10
|
+
import { pluginKey as macroPluginKey } from './pm-plugins/macro/plugin-key';
|
|
11
|
+
import { findNodePosWithLocalId, getDataConsumerMark, getNodeTypesReferenced, getSelectedExtension } from './utils';
|
|
12
|
+
export const getEditInLegacyMacroBrowser = ({
|
|
13
|
+
view,
|
|
14
|
+
macroProvider,
|
|
15
|
+
editorAnalyticsAPI
|
|
16
|
+
}) => {
|
|
17
|
+
return () => {
|
|
18
|
+
if (!view) {
|
|
19
|
+
throw new Error(`Missing view. Can't update without EditorView`);
|
|
20
|
+
}
|
|
21
|
+
if (!macroProvider) {
|
|
22
|
+
throw new Error(`Missing macroProvider. Can't use the macro browser for updates`);
|
|
23
|
+
}
|
|
24
|
+
const nodeWithPos = getSelectedExtension(view.state, true);
|
|
25
|
+
if (!nodeWithPos) {
|
|
26
|
+
throw new Error(`Missing nodeWithPos. Can't determine position of node`);
|
|
27
|
+
}
|
|
28
|
+
insertMacroFromMacroBrowser(editorAnalyticsAPI)(macroProvider, nodeWithPos.node, true)(view);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const extensionAPICallPayload = functionName => ({
|
|
32
|
+
action: ACTION.INVOKED,
|
|
33
|
+
actionSubject: ACTION_SUBJECT.EXTENSION,
|
|
34
|
+
actionSubjectId: ACTION_SUBJECT_ID.EXTENSION_API,
|
|
35
|
+
attributes: {
|
|
36
|
+
functionName
|
|
37
|
+
},
|
|
38
|
+
eventType: EVENT_TYPE.TRACK
|
|
39
|
+
});
|
|
40
|
+
export const createExtensionAPI = options => {
|
|
41
|
+
const {
|
|
42
|
+
editorView: {
|
|
43
|
+
state: {
|
|
44
|
+
schema
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
editorAnalyticsAPI
|
|
48
|
+
} = options;
|
|
49
|
+
const nodes = Object.keys(schema.nodes);
|
|
50
|
+
const marks = Object.keys(schema.marks);
|
|
51
|
+
const validate = validator(nodes, marks, {
|
|
52
|
+
allowPrivateAttributes: true
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Finds the node and its position by `localId`. Throws if the node could not be found.
|
|
57
|
+
*
|
|
58
|
+
* @returns {NodeWithPos}
|
|
59
|
+
*/
|
|
60
|
+
const ensureNodePosByLocalId = (localId, {
|
|
61
|
+
opName
|
|
62
|
+
}) => {
|
|
63
|
+
// Be extra cautious since 3rd party devs can use regular JS without type safety
|
|
64
|
+
if (typeof localId !== 'string' || localId === '') {
|
|
65
|
+
throw new Error(`${opName}(): Invalid localId '${localId}'.`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Find the node + position matching the given ID
|
|
69
|
+
const {
|
|
70
|
+
editorView: {
|
|
71
|
+
state
|
|
72
|
+
}
|
|
73
|
+
} = options;
|
|
74
|
+
const nodePos = findNodePosWithLocalId(state, localId);
|
|
75
|
+
if (!nodePos) {
|
|
76
|
+
throw new Error(`${opName}(): Could not find node with ID '${localId}'.`);
|
|
77
|
+
}
|
|
78
|
+
return nodePos;
|
|
79
|
+
};
|
|
80
|
+
const doc = {
|
|
81
|
+
insertAfter: (localId, adf, opt) => {
|
|
82
|
+
try {
|
|
83
|
+
validate(adf);
|
|
84
|
+
} catch (e) {
|
|
85
|
+
throw new Error(`insertAfter(): Invalid ADF given.`);
|
|
86
|
+
}
|
|
87
|
+
const nodePos = ensureNodePosByLocalId(localId, {
|
|
88
|
+
opName: 'insertAfter'
|
|
89
|
+
});
|
|
90
|
+
const {
|
|
91
|
+
editorView
|
|
92
|
+
} = options;
|
|
93
|
+
const {
|
|
94
|
+
dispatch,
|
|
95
|
+
state
|
|
96
|
+
} = editorView;
|
|
97
|
+
|
|
98
|
+
// Validate the given ADF
|
|
99
|
+
const {
|
|
100
|
+
tr,
|
|
101
|
+
schema
|
|
102
|
+
} = state;
|
|
103
|
+
const nodeType = schema.nodes[adf.type];
|
|
104
|
+
if (!nodeType) {
|
|
105
|
+
throw new Error(`insertAfter(): Invalid ADF type '${adf.type}'.`);
|
|
106
|
+
}
|
|
107
|
+
const fragment = Fragment.fromJSON(schema, adf.content);
|
|
108
|
+
const marks = (adf.marks || []).map(markEntity => Mark.fromJSON(schema, markEntity));
|
|
109
|
+
const newNode = nodeType === null || nodeType === void 0 ? void 0 : nodeType.createChecked(adf.attrs, fragment, marks);
|
|
110
|
+
if (!newNode) {
|
|
111
|
+
throw new Error('insertAfter(): Could not create a node for given ADFEntity.');
|
|
112
|
+
}
|
|
113
|
+
const insertPosition = nodePos.pos + nodePos.node.nodeSize;
|
|
114
|
+
tr.insert(insertPosition, newNode);
|
|
115
|
+
|
|
116
|
+
// Validate if the document is valid at this point
|
|
117
|
+
try {
|
|
118
|
+
tr.doc.check();
|
|
119
|
+
} catch (err) {
|
|
120
|
+
throw new Error(`insertAfter(): The given ADFEntity cannot be inserted in the current position.\n${err}`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Analytics - tracking the api call
|
|
124
|
+
const apiCallPayload = extensionAPICallPayload('insertAfter');
|
|
125
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent(apiCallPayload)(tr);
|
|
126
|
+
|
|
127
|
+
// Analytics - tracking node types added
|
|
128
|
+
const nodesAdded = [newNode];
|
|
129
|
+
newNode.descendants(node => {
|
|
130
|
+
nodesAdded.push(node);
|
|
131
|
+
return true;
|
|
132
|
+
});
|
|
133
|
+
nodesAdded.forEach(node => {
|
|
134
|
+
const {
|
|
135
|
+
extensionKey,
|
|
136
|
+
extensionType
|
|
137
|
+
} = node.attrs;
|
|
138
|
+
const dataConsumerMark = getDataConsumerMark(node);
|
|
139
|
+
const stringIds = (dataConsumerMark === null || dataConsumerMark === void 0 ? void 0 : dataConsumerMark.attrs.sources.map(sourceId => sourceId)) || [];
|
|
140
|
+
const hasReferentiality = !!dataConsumerMark;
|
|
141
|
+
const nodeTypesReferenced = hasReferentiality ? getNodeTypesReferenced(stringIds, state) : undefined;
|
|
142
|
+
|
|
143
|
+
// fire off analytics for this ADF
|
|
144
|
+
const payload = {
|
|
145
|
+
action: ACTION.INSERTED,
|
|
146
|
+
actionSubject: ACTION_SUBJECT.DOCUMENT,
|
|
147
|
+
attributes: {
|
|
148
|
+
nodeType: node.type.name,
|
|
149
|
+
inputMethod: INPUT_METHOD.EXTENSION_API,
|
|
150
|
+
hasReferentiality,
|
|
151
|
+
nodeTypesReferenced,
|
|
152
|
+
layout: node.attrs.layout,
|
|
153
|
+
extensionType,
|
|
154
|
+
extensionKey
|
|
155
|
+
},
|
|
156
|
+
eventType: EVENT_TYPE.TRACK
|
|
157
|
+
};
|
|
158
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent(payload)(tr);
|
|
159
|
+
});
|
|
160
|
+
if (opt && opt.allowSelectionToNewNode) {
|
|
161
|
+
tr.setSelection(new NodeSelection(tr.doc.resolve(insertPosition)));
|
|
162
|
+
}
|
|
163
|
+
dispatch(tr);
|
|
164
|
+
},
|
|
165
|
+
scrollTo: localId => {
|
|
166
|
+
const nodePos = ensureNodePosByLocalId(localId, {
|
|
167
|
+
opName: 'scrollTo'
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// Analytics - tracking the api call
|
|
171
|
+
const apiCallPayload = extensionAPICallPayload('scrollTo');
|
|
172
|
+
const {
|
|
173
|
+
editorView: {
|
|
174
|
+
dispatch,
|
|
175
|
+
state
|
|
176
|
+
}
|
|
177
|
+
} = options;
|
|
178
|
+
let {
|
|
179
|
+
tr
|
|
180
|
+
} = state;
|
|
181
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent(apiCallPayload)(tr);
|
|
182
|
+
tr = setTextSelection(nodePos.pos)(tr);
|
|
183
|
+
tr = tr.scrollIntoView();
|
|
184
|
+
dispatch(tr);
|
|
185
|
+
},
|
|
186
|
+
update: (localId, mutationCallback) => {
|
|
187
|
+
var _changedValues$marks;
|
|
188
|
+
const {
|
|
189
|
+
node,
|
|
190
|
+
pos
|
|
191
|
+
} = ensureNodePosByLocalId(localId, {
|
|
192
|
+
opName: 'update'
|
|
193
|
+
});
|
|
194
|
+
const {
|
|
195
|
+
editorView: {
|
|
196
|
+
dispatch,
|
|
197
|
+
state
|
|
198
|
+
}
|
|
199
|
+
} = options;
|
|
200
|
+
const {
|
|
201
|
+
tr,
|
|
202
|
+
schema
|
|
203
|
+
} = state;
|
|
204
|
+
const changedValues = mutationCallback({
|
|
205
|
+
content: nodeToJSON(node).content,
|
|
206
|
+
attrs: node.attrs,
|
|
207
|
+
marks: node.marks.map(pmMark => ({
|
|
208
|
+
type: pmMark.type.name,
|
|
209
|
+
attrs: pmMark.attrs
|
|
210
|
+
}))
|
|
211
|
+
});
|
|
212
|
+
const ensureValidMark = mark => {
|
|
213
|
+
if (typeof mark !== 'object' || Array.isArray(mark)) {
|
|
214
|
+
throw new Error(`update(): Invalid mark given.`);
|
|
215
|
+
}
|
|
216
|
+
const {
|
|
217
|
+
parent
|
|
218
|
+
} = state.doc.resolve(pos);
|
|
219
|
+
// Ensure that the given mark is present in the schema
|
|
220
|
+
const markType = schema.marks[mark.type];
|
|
221
|
+
if (!markType) {
|
|
222
|
+
throw new Error(`update(): Invalid ADF mark type '${mark.type}'.`);
|
|
223
|
+
}
|
|
224
|
+
if (!parent.type.allowsMarkType(markType)) {
|
|
225
|
+
throw new Error(`update(): Parent of type '${parent.type.name}' does not allow marks of type '${mark.type}'.`);
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
mark: markType,
|
|
229
|
+
attrs: mark.attrs
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
const newMarks = changedValues.hasOwnProperty('marks') ? (_changedValues$marks = changedValues.marks) === null || _changedValues$marks === void 0 ? void 0 : _changedValues$marks.map(ensureValidMark).map(({
|
|
233
|
+
mark,
|
|
234
|
+
attrs
|
|
235
|
+
}) => mark.create(attrs)) : node.marks;
|
|
236
|
+
const newContent = changedValues.hasOwnProperty('content') ? Fragment.fromJSON(schema, changedValues.content) : node.content;
|
|
237
|
+
const newAttrs = changedValues.hasOwnProperty('attrs') ? changedValues.attrs : node.attrs;
|
|
238
|
+
|
|
239
|
+
// Validate if the new attributes, content and marks result in a valid node and adf.
|
|
240
|
+
try {
|
|
241
|
+
const newNode = node.type.createChecked(newAttrs, newContent, newMarks);
|
|
242
|
+
const newNodeAdf = new JSONTransformer().encodeNode(newNode);
|
|
243
|
+
validate(newNodeAdf);
|
|
244
|
+
tr.replaceWith(pos, pos + node.nodeSize, newNode);
|
|
245
|
+
|
|
246
|
+
// Keep selection if content does not change
|
|
247
|
+
if (newContent === node.content) {
|
|
248
|
+
tr.setSelection(Selection.fromJSON(tr.doc, state.selection.toJSON()));
|
|
249
|
+
}
|
|
250
|
+
} catch (err) {
|
|
251
|
+
throw new Error(`update(): The given ADFEntity cannot be inserted in the current position.\n${err}`);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Analytics - tracking the api call
|
|
255
|
+
const apiCallPayload = extensionAPICallPayload('update');
|
|
256
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent(apiCallPayload)(tr);
|
|
257
|
+
dispatch(tr);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
return {
|
|
261
|
+
editInContextPanel: (transformBefore, transformAfter) => {
|
|
262
|
+
const {
|
|
263
|
+
editorView
|
|
264
|
+
} = options;
|
|
265
|
+
setEditingContextToContextPanel(transformBefore, transformAfter, options.applyChange)(editorView.state, editorView.dispatch, editorView);
|
|
266
|
+
},
|
|
267
|
+
_editInLegacyMacroBrowser: () => {
|
|
268
|
+
const {
|
|
269
|
+
editorView
|
|
270
|
+
} = options;
|
|
271
|
+
let editInLegacy = options.editInLegacyMacroBrowser;
|
|
272
|
+
if (!editInLegacy) {
|
|
273
|
+
const macroState = macroPluginKey.getState(editorView.state);
|
|
274
|
+
editInLegacy = getEditInLegacyMacroBrowser({
|
|
275
|
+
view: options.editorView,
|
|
276
|
+
macroProvider: (macroState === null || macroState === void 0 ? void 0 : macroState.macroProvider) || undefined,
|
|
277
|
+
editorAnalyticsAPI
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
editInLegacy();
|
|
281
|
+
},
|
|
282
|
+
doc
|
|
283
|
+
};
|
|
284
|
+
};
|
package/dist/es2019/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { extensionPlugin } from './plugin';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { pluginFactory } from '@atlaskit/editor-common/utils';
|
|
2
|
+
import { pluginKey } from './plugin-key';
|
|
3
|
+
import reducer from './reducer';
|
|
4
|
+
const factory = pluginFactory(pluginKey, reducer, {
|
|
5
|
+
mapping(tr, state) {
|
|
6
|
+
const {
|
|
7
|
+
positions: previousPositions
|
|
8
|
+
} = state;
|
|
9
|
+
if (!previousPositions) {
|
|
10
|
+
return state;
|
|
11
|
+
}
|
|
12
|
+
const positions = {
|
|
13
|
+
...previousPositions
|
|
14
|
+
};
|
|
15
|
+
for (const key in positions) {
|
|
16
|
+
positions[key] = tr.mapping.map(positions[key]);
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
...state,
|
|
20
|
+
positions
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
export const createPluginState = factory.createPluginState;
|
|
25
|
+
export const createCommand = factory.createCommand;
|
|
26
|
+
export const getPluginState = factory.getPluginState;
|