@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,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useAbortableEffect = useAbortableEffect;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var safeError = function safeError(message) {
|
|
11
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
12
|
+
throw new Error(message);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line no-console
|
|
16
|
+
console.error(message);
|
|
17
|
+
};
|
|
18
|
+
var createAbortController = function createAbortController() {
|
|
19
|
+
if (typeof AbortController === 'undefined') {
|
|
20
|
+
safeError('Missing AbortController');
|
|
21
|
+
}
|
|
22
|
+
return new AbortController();
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Similar to useEffect but integrated with the AbortController to make it useful for async operations.
|
|
26
|
+
* On unmount, the abort function will be called and the signal will be passed down to the function so
|
|
27
|
+
* we get the chance to cancel any operation we want.
|
|
28
|
+
*
|
|
29
|
+
* Note: This hook follows the signature of useEffect so it can be linted if enabled through the
|
|
30
|
+
* `additionalHooks` config.
|
|
31
|
+
*
|
|
32
|
+
* @param callback
|
|
33
|
+
* @param deps
|
|
34
|
+
*/
|
|
35
|
+
function useAbortableEffect(callback, deps) {
|
|
36
|
+
var abortController = (0, _react.useMemo)(function () {
|
|
37
|
+
return createAbortController();
|
|
38
|
+
},
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
+
deps);
|
|
41
|
+
var abort = (0, _react.useCallback)(function () {
|
|
42
|
+
return abortController.abort();
|
|
43
|
+
}, [abortController]);
|
|
44
|
+
// AFP-2511 TODO: Fix automatic suppressions below
|
|
45
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
46
|
+
var fn = (0, _react.useCallback)(callback, deps);
|
|
47
|
+
(0, _react.useEffect)(function () {
|
|
48
|
+
var teardown = fn(abortController.signal);
|
|
49
|
+
return function () {
|
|
50
|
+
if (typeof teardown === 'function') {
|
|
51
|
+
teardown();
|
|
52
|
+
}
|
|
53
|
+
abort();
|
|
54
|
+
};
|
|
55
|
+
}, [abortController, abort, fn].concat((0, _toConsumableArray2.default)(deps)));
|
|
56
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useStateFromPromise = useStateFromPromise;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _useAbortableEffect = require("../use-abortable-effect");
|
|
12
|
+
/**
|
|
13
|
+
* Similar to useState but deals with async values.
|
|
14
|
+
* Simply pass a promise and it will set the state when it resolves. It won't try to set if
|
|
15
|
+
* the component unmounts
|
|
16
|
+
*
|
|
17
|
+
* Note: This hook follows the signature of useEffect so it can be linted if enabled through the
|
|
18
|
+
* `additionalHooks` config.
|
|
19
|
+
*
|
|
20
|
+
* @param callback
|
|
21
|
+
* @param deps
|
|
22
|
+
*/
|
|
23
|
+
function useStateFromPromise(callback, deps, initialValue) {
|
|
24
|
+
// AFP-2511 TODO: Fix automatic suppressions below
|
|
25
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
|
+
var fn = (0, _react.useCallback)(callback, deps);
|
|
27
|
+
var _useState = (0, _react.useState)(initialValue),
|
|
28
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
29
|
+
value = _useState2[0],
|
|
30
|
+
setValue = _useState2[1];
|
|
31
|
+
(0, _useAbortableEffect.useAbortableEffect)(function (signal) {
|
|
32
|
+
Promise.resolve(fn()).then(function (result) {
|
|
33
|
+
if (signal.aborted) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
setValue(result);
|
|
37
|
+
});
|
|
38
|
+
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
|
+
(0, _toConsumableArray2.default)(deps));
|
|
40
|
+
return [value, setValue];
|
|
41
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.validateRequired = exports.validate = exports.parseParamType = exports.isDuplicateField = exports.getSafeParentedName = exports.getOptionFromValue = exports.getNameFromDuplicateField = exports.getLoggedParameters = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _select = require("@atlaskit/select");
|
|
10
|
+
var _constants = require("./constants");
|
|
11
|
+
var _types = require("./types");
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
var validate = exports.validate = function validate(field, value) {
|
|
15
|
+
return validateRequired(field, value);
|
|
16
|
+
};
|
|
17
|
+
var isEmptyString = function isEmptyString(value) {
|
|
18
|
+
return typeof value === 'string' && value === '';
|
|
19
|
+
};
|
|
20
|
+
var isEmptyArray = function isEmptyArray(value) {
|
|
21
|
+
return Array.isArray(value) && value.length === 0;
|
|
22
|
+
};
|
|
23
|
+
var getUngroupedOptions = function getUngroupedOptions(groupedOptions) {
|
|
24
|
+
return groupedOptions.flatMap(function (option) {
|
|
25
|
+
return option.options;
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var validateRequired = exports.validateRequired = function validateRequired(_ref, value) {
|
|
29
|
+
var isRequired = _ref.isRequired,
|
|
30
|
+
isMultiple = _ref.isMultiple;
|
|
31
|
+
if (isRequired) {
|
|
32
|
+
var isUndefined = typeof value === 'undefined';
|
|
33
|
+
var isEmpty = isEmptyString(value) || isMultiple && isEmptyArray(value) || false;
|
|
34
|
+
return isUndefined || isEmpty ? _types.ValidationError.Required : undefined;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
};
|
|
38
|
+
var getOptionFromValue = exports.getOptionFromValue = function getOptionFromValue(options, value) {
|
|
39
|
+
if (!Array.isArray(options) || options.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
if ((0, _select.isOptionsGrouped)(options)) {
|
|
44
|
+
return getUngroupedOptions(options).filter(function (option) {
|
|
45
|
+
return value.includes(option.value);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return options.filter(function (option) {
|
|
49
|
+
return value.includes(option.value);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if ((0, _select.isOptionsGrouped)(options)) {
|
|
53
|
+
return getUngroupedOptions(options).find(function (option) {
|
|
54
|
+
return value === option.value;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return options.find(function (option) {
|
|
58
|
+
return value === option.value;
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Atlaskit uses final-form to power the form.
|
|
63
|
+
// Final-form will create nesting in the tree if a dot (.) is used in the name of the field.
|
|
64
|
+
// A parent is provided from a <Fieldset /> and is appended to the name here for simplicity
|
|
65
|
+
var getSafeParentedName = exports.getSafeParentedName = function getSafeParentedName(name, parentName) {
|
|
66
|
+
if (parentName && name.indexOf("".concat(parentName, ".")) === -1) {
|
|
67
|
+
return "".concat(parentName, ".").concat(name);
|
|
68
|
+
}
|
|
69
|
+
return name;
|
|
70
|
+
};
|
|
71
|
+
var duplicateFieldRegex = /:[0-9]+$/;
|
|
72
|
+
var isDuplicateField = exports.isDuplicateField = function isDuplicateField(key) {
|
|
73
|
+
return duplicateFieldRegex.test(key);
|
|
74
|
+
};
|
|
75
|
+
var getNameFromDuplicateField = exports.getNameFromDuplicateField = function getNameFromDuplicateField(key) {
|
|
76
|
+
return key.replace(duplicateFieldRegex, '');
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// An overly cautious parser for sanitizing configuration parameters of UGC
|
|
80
|
+
var parseParamType = exports.parseParamType = function parseParamType(paramValue, paramField) {
|
|
81
|
+
if (paramValue && paramField) {
|
|
82
|
+
if (paramField.type === 'string') {
|
|
83
|
+
if (paramField.name === 'types') {
|
|
84
|
+
// Parse types field as an array of valid content types
|
|
85
|
+
var contentTypes = ['page', 'blogpost', 'comment', 'attachment'];
|
|
86
|
+
return paramValue && paramValue.split(',').map(function (type) {
|
|
87
|
+
return type.trim();
|
|
88
|
+
}).filter(function (type) {
|
|
89
|
+
return contentTypes.includes(type);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (paramField.name === 'width') {
|
|
93
|
+
return parseFloat(paramValue);
|
|
94
|
+
}
|
|
95
|
+
// Strings are very risky - return empty string in case anything slips through
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
if (_constants.ALLOWED_PARAM_TYPES.includes(paramField.type)) {
|
|
99
|
+
// The param types defined here are already parsed and safe to log
|
|
100
|
+
return paramValue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Safety net
|
|
104
|
+
return null;
|
|
105
|
+
};
|
|
106
|
+
var getLoggedParameters = exports.getLoggedParameters = function getLoggedParameters(macroKey, currentParams, macroFields) {
|
|
107
|
+
// Get the parameters only defined in the allowlist of logged macro/parameter keys
|
|
108
|
+
return Object.keys(currentParams).filter(function (paramKey) {
|
|
109
|
+
var _ALLOWED_LOGGED_MACRO;
|
|
110
|
+
return (_ALLOWED_LOGGED_MACRO = _constants.ALLOWED_LOGGED_MACRO_PARAMS[macroKey]) === null || _ALLOWED_LOGGED_MACRO === void 0 ? void 0 : _ALLOWED_LOGGED_MACRO.includes(paramKey);
|
|
111
|
+
}).reduce(function (obj, param) {
|
|
112
|
+
return _objectSpread(_objectSpread({}, obj), {}, (0, _defineProperty2.default)({}, param, parseParamType(currentParams[param], macroFields === null || macroFields === void 0 ? void 0 : macroFields.find(function (field) {
|
|
113
|
+
return field.name === param;
|
|
114
|
+
}))));
|
|
115
|
+
}, {});
|
|
116
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SaveIndicator = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
var _reactIntlNext = require("react-intl-next");
|
|
12
|
+
var _checkCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/check-circle"));
|
|
13
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
14
|
+
var _messages = require("./messages");
|
|
15
|
+
/** @jsx jsx */
|
|
16
|
+
|
|
17
|
+
var noop = function noop() {};
|
|
18
|
+
var saveIndicatorWrapperStyles = (0, _react2.css)({
|
|
19
|
+
display: 'flex',
|
|
20
|
+
justifyContent: 'center'
|
|
21
|
+
});
|
|
22
|
+
var saveIndicatorContentStyles = (0, _react2.css)({
|
|
23
|
+
position: 'fixed',
|
|
24
|
+
width: '256px',
|
|
25
|
+
bottom: "var(--ds-space-250, 20px)",
|
|
26
|
+
display: 'flex',
|
|
27
|
+
flexDirection: 'row',
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
padding: "var(--ds-space-075, 6px)".concat(" ", "var(--ds-space-150, 12px)"),
|
|
30
|
+
background: "var(--ds-surface-overlay, ".concat(_colors.N0, ")"),
|
|
31
|
+
/* E300 */
|
|
32
|
+
boxShadow: "var(--ds-shadow-overlay, ".concat("0px 8px 12px rgba(9, 30, 66, 0.15), 0px 0px 1px rgba(9, 30, 66, 0.31)", ")"),
|
|
33
|
+
borderRadius: '16px'
|
|
34
|
+
});
|
|
35
|
+
var saveIndicatorTextStyles = (0, _react2.css)({
|
|
36
|
+
paddingLeft: "var(--ds-space-075, 6px)"
|
|
37
|
+
});
|
|
38
|
+
var SaveIndicator = exports.SaveIndicator = function SaveIndicator(_ref) {
|
|
39
|
+
var children = _ref.children,
|
|
40
|
+
duration = _ref.duration,
|
|
41
|
+
_ref$visible = _ref.visible,
|
|
42
|
+
visible = _ref$visible === void 0 ? true : _ref$visible;
|
|
43
|
+
var _useState = (0, _react.useState)(false),
|
|
44
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
45
|
+
saving = _useState2[0],
|
|
46
|
+
setSaving = _useState2[1];
|
|
47
|
+
var shown = (0, _react.useRef)(false);
|
|
48
|
+
var onSaveStarted = (0, _react.useCallback)(function () {
|
|
49
|
+
if (!shown.current) {
|
|
50
|
+
setSaving(true);
|
|
51
|
+
shown.current = true;
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
(0, _react.useEffect)(function () {
|
|
55
|
+
if (saving) {
|
|
56
|
+
var handleId = setTimeout(function () {
|
|
57
|
+
setSaving(false);
|
|
58
|
+
}, duration);
|
|
59
|
+
return function () {
|
|
60
|
+
return clearTimeout(handleId);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}, [saving, duration]);
|
|
64
|
+
return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)("div", null, children({
|
|
65
|
+
onSaveStarted: onSaveStarted,
|
|
66
|
+
onSaveEnded: noop
|
|
67
|
+
})), visible && saving && (0, _react2.jsx)("div", {
|
|
68
|
+
css: saveIndicatorWrapperStyles
|
|
69
|
+
}, (0, _react2.jsx)("div", {
|
|
70
|
+
css: saveIndicatorContentStyles,
|
|
71
|
+
"data-testid": "save-indicator-content"
|
|
72
|
+
}, (0, _react2.jsx)(_checkCircle.default, {
|
|
73
|
+
label: "Saving",
|
|
74
|
+
primaryColor: "var(--ds-icon-success, ".concat(_colors.G300, ")"),
|
|
75
|
+
size: "small"
|
|
76
|
+
}), (0, _react2.jsx)("span", {
|
|
77
|
+
css: saveIndicatorTextStyles
|
|
78
|
+
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.saveIndicator)))));
|
|
79
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.messages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
saveIndicator: {
|
|
10
|
+
id: 'fabric.editor.extensions.config-panel.save-indicator',
|
|
11
|
+
defaultMessage: 'All changes are always autosaved',
|
|
12
|
+
description: 'Message shown to the user to notify to them that we save the changes automatically.'
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getSelectedExtension = exports.getSelectedDomElement = exports.getNodeTypesReferenced = exports.getDataConsumerMark = exports.findNodePosWithLocalId = exports.findExtensionWithLocalId = void 0;
|
|
7
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
8
|
+
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
|
|
9
|
+
var getSelectedExtension = exports.getSelectedExtension = function getSelectedExtension(state) {
|
|
10
|
+
var searchParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
11
|
+
var _state$schema$nodes = state.schema.nodes,
|
|
12
|
+
inlineExtension = _state$schema$nodes.inlineExtension,
|
|
13
|
+
extension = _state$schema$nodes.extension,
|
|
14
|
+
bodiedExtension = _state$schema$nodes.bodiedExtension,
|
|
15
|
+
multiBodiedExtension = _state$schema$nodes.multiBodiedExtension;
|
|
16
|
+
var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
|
|
17
|
+
return (0, _utils2.findSelectedNodeOfType)(nodeTypes)(state.selection) || searchParent && (0, _utils2.findParentNodeOfType)(nodeTypes)(state.selection) || undefined;
|
|
18
|
+
};
|
|
19
|
+
var findExtensionWithLocalId = exports.findExtensionWithLocalId = function findExtensionWithLocalId(state, localId) {
|
|
20
|
+
var selectedExtension = getSelectedExtension(state, true);
|
|
21
|
+
if (!localId) {
|
|
22
|
+
return selectedExtension;
|
|
23
|
+
}
|
|
24
|
+
if (selectedExtension && selectedExtension.node.attrs.localId === localId) {
|
|
25
|
+
return selectedExtension;
|
|
26
|
+
}
|
|
27
|
+
var _state$schema$nodes2 = state.schema.nodes,
|
|
28
|
+
inlineExtension = _state$schema$nodes2.inlineExtension,
|
|
29
|
+
extension = _state$schema$nodes2.extension,
|
|
30
|
+
bodiedExtension = _state$schema$nodes2.bodiedExtension,
|
|
31
|
+
multiBodiedExtension = _state$schema$nodes2.multiBodiedExtension;
|
|
32
|
+
var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
|
|
33
|
+
var matched;
|
|
34
|
+
state.doc.descendants(function (node, pos) {
|
|
35
|
+
if (nodeTypes.includes(node.type) && node.attrs.localId === localId) {
|
|
36
|
+
matched = {
|
|
37
|
+
node: node,
|
|
38
|
+
pos: pos
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return matched;
|
|
43
|
+
};
|
|
44
|
+
var getSelectedDomElement = exports.getSelectedDomElement = function getSelectedDomElement(schema, domAtPos, selectedExtensionNode) {
|
|
45
|
+
var selectedExtensionDomNode = (0, _utils2.findDomRefAtPos)(selectedExtensionNode.pos, domAtPos);
|
|
46
|
+
var isContentExtension = selectedExtensionNode.node.type !== schema.nodes.bodiedExtension;
|
|
47
|
+
return (
|
|
48
|
+
// Content extension can be nested in bodied-extension, the following check is necessary for that case
|
|
49
|
+
(isContentExtension ?
|
|
50
|
+
// Search down
|
|
51
|
+
selectedExtensionDomNode.querySelector('.extension-container') :
|
|
52
|
+
// Try searching up and then down
|
|
53
|
+
(0, _utils.closestElement)(selectedExtensionDomNode, '.extension-container') || selectedExtensionDomNode.querySelector('.extension-container')) || selectedExtensionDomNode
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
var getDataConsumerMark = exports.getDataConsumerMark = function getDataConsumerMark(newNode) {
|
|
57
|
+
var _newNode$marks;
|
|
58
|
+
return (_newNode$marks = newNode.marks) === null || _newNode$marks === void 0 ? void 0 : _newNode$marks.find(function (mark) {
|
|
59
|
+
return mark.type.name === 'dataConsumer';
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
var getNodeTypesReferenced = exports.getNodeTypesReferenced = function getNodeTypesReferenced(ids, state) {
|
|
63
|
+
return (0, _utils.findNodePosByLocalIds)(state, ids, {
|
|
64
|
+
includeDocNode: true
|
|
65
|
+
}).map(function (_ref) {
|
|
66
|
+
var node = _ref.node;
|
|
67
|
+
return node.type.name;
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
var findNodePosWithLocalId = exports.findNodePosWithLocalId = function findNodePosWithLocalId(state, localId) {
|
|
71
|
+
var nodes = (0, _utils.findNodePosByLocalIds)(state, [localId]);
|
|
72
|
+
return nodes.length >= 1 ? nodes[0] : undefined;
|
|
73
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { ACTION, ACTION_SUBJECT, EVENT_TYPE, INPUT_METHOD, TARGET_SELECTION_SOURCE } from '@atlaskit/editor-common/analytics';
|
|
2
|
+
export { transformSliceToRemoveOpenBodiedExtension } from '@atlaskit/editor-common/transforms';
|
|
3
|
+
import { NodeSelection, Selection, TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
4
|
+
import { findSelectedNodeOfType, replaceParentNodeOfType, replaceSelectedNode } from '@atlaskit/editor-prosemirror/utils';
|
|
5
|
+
import { createExtensionAPI, getEditInLegacyMacroBrowser } from './extension-api';
|
|
6
|
+
import { getPluginState } from './pm-plugins/main';
|
|
7
|
+
import { findExtensionWithLocalId } from './utils';
|
|
8
|
+
export const buildExtensionNode = (type, schema, attrs, content, marks) => {
|
|
9
|
+
switch (type) {
|
|
10
|
+
case 'extension':
|
|
11
|
+
return schema.nodes.extension.createChecked(attrs, content, marks);
|
|
12
|
+
case 'inlineExtension':
|
|
13
|
+
return schema.nodes.inlineExtension.createChecked(attrs, content, marks);
|
|
14
|
+
case 'bodiedExtension':
|
|
15
|
+
return schema.nodes.bodiedExtension.create(attrs, content, marks);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const performNodeUpdate = editorAnalyticsAPI => (type, newAttrs, content, marks, shouldScrollIntoView) => (_state, _dispatch, view) => {
|
|
19
|
+
if (!view) {
|
|
20
|
+
throw Error('EditorView is required to perform node update!');
|
|
21
|
+
}
|
|
22
|
+
// NOTE: `state` and `dispatch` are stale at this point so we need to grab
|
|
23
|
+
// the latest one from `view` @see HOT-93986
|
|
24
|
+
const {
|
|
25
|
+
state,
|
|
26
|
+
dispatch
|
|
27
|
+
} = view;
|
|
28
|
+
const newNode = buildExtensionNode(type, state.schema, newAttrs, content, marks);
|
|
29
|
+
if (!newNode) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const {
|
|
33
|
+
selection,
|
|
34
|
+
schema
|
|
35
|
+
} = state;
|
|
36
|
+
const {
|
|
37
|
+
extension,
|
|
38
|
+
inlineExtension,
|
|
39
|
+
bodiedExtension
|
|
40
|
+
} = schema.nodes;
|
|
41
|
+
const isBodiedExtensionSelected = !!findSelectedNodeOfType([bodiedExtension])(selection);
|
|
42
|
+
const extensionState = getPluginState(state);
|
|
43
|
+
let targetSelectionSource = TARGET_SELECTION_SOURCE.CURRENT_SELECTION;
|
|
44
|
+
let action = ACTION.UPDATED;
|
|
45
|
+
let {
|
|
46
|
+
tr
|
|
47
|
+
} = state;
|
|
48
|
+
|
|
49
|
+
// When it's a bodiedExtension but not selected
|
|
50
|
+
if (newNode.type === bodiedExtension && !isBodiedExtensionSelected) {
|
|
51
|
+
// Bodied extensions can trigger an update when the cursor is inside which means that there is no node selected.
|
|
52
|
+
// To work around that we replace the parent and create a text selection instead of new node selection
|
|
53
|
+
tr = replaceParentNodeOfType(state.schema.nodes.bodiedExtension, newNode)(tr);
|
|
54
|
+
// Replacing selected node doesn't update the selection. `selection.node` still returns the old node
|
|
55
|
+
tr.setSelection(TextSelection.create(tr.doc, state.selection.anchor));
|
|
56
|
+
}
|
|
57
|
+
// If any extension is currently selected
|
|
58
|
+
else if (findSelectedNodeOfType([extension, bodiedExtension, inlineExtension])(selection)) {
|
|
59
|
+
tr = replaceSelectedNode(newNode)(tr);
|
|
60
|
+
// Replacing selected node doesn't update the selection. `selection.node` still returns the old node
|
|
61
|
+
tr.setSelection(NodeSelection.create(tr.doc, tr.mapping.map(state.selection.anchor)));
|
|
62
|
+
}
|
|
63
|
+
// When we loose the selection. This usually happens when Synchrony resets or changes
|
|
64
|
+
// the selection when user is in the middle of updating an extension.
|
|
65
|
+
else if (extensionState.element) {
|
|
66
|
+
const pos = view.posAtDOM(extensionState.element, -1);
|
|
67
|
+
if (pos > -1) {
|
|
68
|
+
tr = tr.replaceWith(pos, pos + (content.size || 0) + 1, newNode);
|
|
69
|
+
tr.setSelection(Selection.near(tr.doc.resolve(pos)));
|
|
70
|
+
targetSelectionSource = TARGET_SELECTION_SOURCE.HTML_ELEMENT;
|
|
71
|
+
} else {
|
|
72
|
+
action = ACTION.ERRORED;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Only scroll if we have anything to update, best to avoid surprise scroll
|
|
77
|
+
if (dispatch && tr.docChanged) {
|
|
78
|
+
const {
|
|
79
|
+
extensionType,
|
|
80
|
+
extensionKey,
|
|
81
|
+
layout,
|
|
82
|
+
localId
|
|
83
|
+
} = newNode.attrs;
|
|
84
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
|
|
85
|
+
action,
|
|
86
|
+
actionSubject: ACTION_SUBJECT.EXTENSION,
|
|
87
|
+
actionSubjectId: newNode.type.name,
|
|
88
|
+
eventType: EVENT_TYPE.TRACK,
|
|
89
|
+
attributes: {
|
|
90
|
+
inputMethod: INPUT_METHOD.CONFIG_PANEL,
|
|
91
|
+
extensionType,
|
|
92
|
+
extensionKey,
|
|
93
|
+
layout,
|
|
94
|
+
localId,
|
|
95
|
+
selection: tr.selection.toJSON(),
|
|
96
|
+
targetSelectionSource
|
|
97
|
+
}
|
|
98
|
+
})(tr);
|
|
99
|
+
dispatch(shouldScrollIntoView ? tr.scrollIntoView() : tr);
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
};
|
|
103
|
+
const updateExtensionParams = editorAnalyticsAPI => (updateExtension, node, actions) => async (state, dispatch, view) => {
|
|
104
|
+
const {
|
|
105
|
+
attrs,
|
|
106
|
+
type,
|
|
107
|
+
content,
|
|
108
|
+
marks
|
|
109
|
+
} = node.node;
|
|
110
|
+
if (!state.schema.nodes[type.name]) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const {
|
|
114
|
+
parameters
|
|
115
|
+
} = attrs;
|
|
116
|
+
try {
|
|
117
|
+
const newParameters = await updateExtension(parameters, actions);
|
|
118
|
+
if (newParameters) {
|
|
119
|
+
const newAttrs = {
|
|
120
|
+
...attrs,
|
|
121
|
+
parameters: {
|
|
122
|
+
...parameters,
|
|
123
|
+
...newParameters
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
return performNodeUpdate(editorAnalyticsAPI)(type.name, newAttrs, content, marks, true)(state, dispatch, view);
|
|
127
|
+
}
|
|
128
|
+
} catch {}
|
|
129
|
+
return true;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// This is to decouple extensions from editor core
|
|
133
|
+
// Ideally in the future we completely deprecate `EditorActions`
|
|
134
|
+
export const editSelectedExtension = editorActions => {
|
|
135
|
+
const editorView = editorActions._privateGetEditorView();
|
|
136
|
+
const {
|
|
137
|
+
updateExtension,
|
|
138
|
+
applyChangeToContextPanel
|
|
139
|
+
} = getPluginState(editorView.state);
|
|
140
|
+
// The analytics API cannot be accessed in this case because
|
|
141
|
+
// we do not have access to the plugin injection API. Rather
|
|
142
|
+
// than change the way this works - we just won't use analytics
|
|
143
|
+
// here for now.
|
|
144
|
+
const editorAnalyticsAPI = undefined;
|
|
145
|
+
return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(editorView.state, editorView.dispatch, editorView);
|
|
146
|
+
};
|
|
147
|
+
export const editExtension = (macroProvider, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension) => (state, dispatch, view) => {
|
|
148
|
+
if (!view) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const {
|
|
152
|
+
localId
|
|
153
|
+
} = getPluginState(state);
|
|
154
|
+
const nodeWithPos = findExtensionWithLocalId(state, localId);
|
|
155
|
+
if (!nodeWithPos) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
const editInLegacyMacroBrowser = getEditInLegacyMacroBrowser({
|
|
159
|
+
view,
|
|
160
|
+
macroProvider: macroProvider || undefined,
|
|
161
|
+
editorAnalyticsAPI
|
|
162
|
+
});
|
|
163
|
+
if (updateExtension) {
|
|
164
|
+
updateExtension.then(updateMethod => {
|
|
165
|
+
if (updateMethod && view) {
|
|
166
|
+
const actions = createExtensionAPI({
|
|
167
|
+
editorView: view,
|
|
168
|
+
editInLegacyMacroBrowser,
|
|
169
|
+
applyChange: applyChangeToContextPanel,
|
|
170
|
+
editorAnalyticsAPI
|
|
171
|
+
});
|
|
172
|
+
updateExtensionParams(editorAnalyticsAPI)(updateMethod, nodeWithPos, actions)(state, dispatch, view);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!updateMethod && macroProvider) {
|
|
176
|
+
editInLegacyMacroBrowser();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
} else {
|
|
181
|
+
if (!macroProvider) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
editInLegacyMacroBrowser();
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
};
|
|
188
|
+
export const createEditSelectedExtensionAction = ({
|
|
189
|
+
editorViewRef,
|
|
190
|
+
editorAnalyticsAPI
|
|
191
|
+
}) => () => {
|
|
192
|
+
const {
|
|
193
|
+
current: view
|
|
194
|
+
} = editorViewRef;
|
|
195
|
+
if (!view) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
const {
|
|
199
|
+
updateExtension,
|
|
200
|
+
applyChangeToContextPanel
|
|
201
|
+
} = getPluginState(view.state);
|
|
202
|
+
return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(view.state, view.dispatch, view);
|
|
203
|
+
};
|