@atlaskit/editor-plugin-extension 1.5.2 → 1.5.3

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.
Files changed (31) hide show
  1. package/.eslintrc.js +12 -12
  2. package/CHANGELOG.md +219 -214
  3. package/LICENSE.md +6 -8
  4. package/dist/cjs/ui/ConfigPanel/ErrorMessage/ErrorImage.js +12 -4
  5. package/dist/cjs/ui/ConfigPanel/Fields/ColorPicker.js +1 -1
  6. package/dist/cjs/ui/ConfigPanel/FormContent.js +4 -1
  7. package/dist/cjs/ui/ConfigPanel/Header.js +1 -0
  8. package/dist/cjs/ui/ConfigPanel/NestedForms/RemovableField.js +3 -1
  9. package/dist/es2019/ui/ConfigPanel/ErrorMessage/ErrorImage.js +12 -4
  10. package/dist/es2019/ui/ConfigPanel/Fields/ColorPicker.js +1 -1
  11. package/dist/es2019/ui/ConfigPanel/FormContent.js +4 -1
  12. package/dist/es2019/ui/ConfigPanel/Header.js +1 -0
  13. package/dist/es2019/ui/ConfigPanel/NestedForms/RemovableField.js +3 -1
  14. package/dist/esm/ui/ConfigPanel/ErrorMessage/ErrorImage.js +12 -4
  15. package/dist/esm/ui/ConfigPanel/Fields/ColorPicker.js +1 -1
  16. package/dist/esm/ui/ConfigPanel/FormContent.js +4 -1
  17. package/dist/esm/ui/ConfigPanel/Header.js +1 -0
  18. package/dist/esm/ui/ConfigPanel/NestedForms/RemovableField.js +3 -1
  19. package/dist/types/ui/ConfigPanel/Fields/UnhandledType.d.ts +1 -1
  20. package/dist/types/ui/SaveIndicator/SaveIndicator.d.ts +1 -1
  21. package/dist/types-ts4.5/ui/ConfigPanel/Fields/UnhandledType.d.ts +1 -1
  22. package/dist/types-ts4.5/ui/SaveIndicator/SaveIndicator.d.ts +1 -1
  23. package/example-utils/config-panel/ConfigPanelWithExtensionPicker.tsx +158 -172
  24. package/example-utils/config-panel/ConfigPanelWithProviders.tsx +37 -37
  25. package/example-utils/config-panel/ExtensionNodePicker.tsx +110 -121
  26. package/example-utils/config-panel/FieldTypePicker.tsx +49 -47
  27. package/example-utils/config-panel/example-manifest-all-fields.ts +63 -63
  28. package/example-utils/config-panel/example-manifest-individual-fields.ts +64 -64
  29. package/example-utils/config-panel/fields.ts +617 -619
  30. package/package.json +8 -10
  31. package/report.api.md +42 -47
@@ -8,9 +8,9 @@ import { IntlProvider } from 'react-intl-next';
8
8
  // eslint-disable-next-line import/no-extraneous-dependencies
9
9
  import { CodeBlock } from '@atlaskit/code';
10
10
  import type {
11
- ExtensionModule,
12
- ExtensionProvider,
13
- Parameters,
11
+ ExtensionModule,
12
+ ExtensionProvider,
13
+ Parameters,
14
14
  } from '@atlaskit/editor-common/extensions';
15
15
  import { getExtensionKeyAndNodeKey } from '@atlaskit/editor-common/extensions';
16
16
  import { Box, xcss } from '@atlaskit/primitives';
@@ -30,189 +30,175 @@ const exampleWrapperStyles = css({ display: 'flex', flexDirection: 'row' });
30
30
 
31
31
  // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
32
32
  const column = (width: number | string) =>
33
- css({
34
- width: `${width}px`,
35
- margin: token('space.200', '16px'),
36
- h3: {
37
- borderBottom: `1px solid ${colors.N50}`,
38
- marginBottom: token('space.200', '16px'),
39
- },
40
- });
33
+ css({
34
+ width: `${width}px`,
35
+ margin: token('space.200', '16px'),
36
+ h3: {
37
+ borderBottom: `1px solid ${colors.N50}`,
38
+ marginBottom: token('space.200', '16px'),
39
+ },
40
+ });
41
41
 
42
42
  const codeWrapperStyles = css({
43
- marginTop: token('space.200', '16px'),
43
+ marginTop: token('space.200', '16px'),
44
44
  });
45
45
 
46
46
  function ExtensionConfigPanel({
47
- extension,
48
- node,
49
- nodeKey,
50
- extensionProvider,
51
- parameters: initialParameters = {},
52
- item,
47
+ extension,
48
+ node,
49
+ nodeKey,
50
+ extensionProvider,
51
+ parameters: initialParameters = {},
52
+ item,
53
53
  }: { extensionProvider: ExtensionProvider; nodeKey: string } & CallbackParams) {
54
- const [fields] = useStateFromPromise(
55
- function getFields() {
56
- if (node && typeof node.getFieldsDefinition === 'function') {
57
- return node.getFieldsDefinition({});
58
- }
59
- },
60
- [node],
61
- [],
62
- );
63
-
64
- const [parametersJson, setParametersJson] = useState(() =>
65
- JSON.stringify(initialParameters),
66
- );
67
-
68
- const [parameters, setParameters] = useState(initialParameters);
69
-
70
- const onChangeParametersJson: React.ChangeEventHandler<
71
- HTMLTextAreaElement
72
- > = event => {
73
- setParametersJson(event.target.value);
74
- };
75
-
76
- useEffect(() => {
77
- try {
78
- setParameters({
79
- ...parameters,
80
- ...JSON.parse(parametersJson),
81
- });
82
- } catch (e) {
83
- // eslint-disable-next-line no-console
84
- console.error(
85
- 'Invalid JSON Parameters',
86
- e instanceof Error ? e.message : String(e),
87
- );
88
- }
89
- // eslint-disable-next-line react-hooks/exhaustive-deps
90
- }, [parametersJson]);
91
-
92
- if (!extension || !node || !item) {
93
- return null;
94
- }
95
-
96
- return (
97
- <div css={exampleWrapperStyles}>
98
- {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
99
- <div css={column(400)} key="config-panel">
100
- <h3>Config panel:</h3>
101
- <ConfigPanelWithProviders
102
- extensionType={extension.type}
103
- extensionKey={extension.key}
104
- nodeKey={nodeKey}
105
- extensionProvider={extensionProvider}
106
- parameters={parameters}
107
- onChange={setParameters}
108
- />
109
- </div>
110
- {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
111
- <div css={column(500)} key="parameters">
112
- <h3>Initial Parameters:</h3>
113
- <div css={codeWrapperStyles}>
114
- {parameters && (
115
- <TextArea
116
- onChange={onChangeParametersJson}
117
- value={parametersJson}
118
- />
119
- )}
120
- </div>
121
- <h3>State:</h3>
122
- <div css={codeWrapperStyles}>
123
- {parameters && (
124
- <CodeBlock
125
- language="json"
126
- text={JSON.stringify(parameters, null, 4)}
127
- showLineNumbers={false}
128
- />
129
- )}
130
- </div>
131
- </div>
132
- {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
133
- <div css={column(500)} key="fields-definition">
134
- <h3>Fields definition:</h3>
135
- <div css={codeWrapperStyles}>
136
- <CodeBlock
137
- language="json"
138
- text={JSON.stringify(fields, null, 4)}
139
- showLineNumbers={false}
140
- />
141
- </div>
142
- </div>
143
- </div>
144
- );
54
+ const [fields] = useStateFromPromise(
55
+ function getFields() {
56
+ if (node && typeof node.getFieldsDefinition === 'function') {
57
+ return node.getFieldsDefinition({});
58
+ }
59
+ },
60
+ [node],
61
+ [],
62
+ );
63
+
64
+ const [parametersJson, setParametersJson] = useState(() => JSON.stringify(initialParameters));
65
+
66
+ const [parameters, setParameters] = useState(initialParameters);
67
+
68
+ const onChangeParametersJson: React.ChangeEventHandler<HTMLTextAreaElement> = (event) => {
69
+ setParametersJson(event.target.value);
70
+ };
71
+
72
+ useEffect(() => {
73
+ try {
74
+ setParameters({
75
+ ...parameters,
76
+ ...JSON.parse(parametersJson),
77
+ });
78
+ } catch (e) {
79
+ // eslint-disable-next-line no-console
80
+ console.error('Invalid JSON Parameters', e instanceof Error ? e.message : String(e));
81
+ }
82
+ // eslint-disable-next-line react-hooks/exhaustive-deps
83
+ }, [parametersJson]);
84
+
85
+ if (!extension || !node || !item) {
86
+ return null;
87
+ }
88
+
89
+ return (
90
+ <div css={exampleWrapperStyles}>
91
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
92
+ <div css={column(400)} key="config-panel">
93
+ <h3>Config panel:</h3>
94
+ <ConfigPanelWithProviders
95
+ extensionType={extension.type}
96
+ extensionKey={extension.key}
97
+ nodeKey={nodeKey}
98
+ extensionProvider={extensionProvider}
99
+ parameters={parameters}
100
+ onChange={setParameters}
101
+ />
102
+ </div>
103
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
104
+ <div css={column(500)} key="parameters">
105
+ <h3>Initial Parameters:</h3>
106
+ <div css={codeWrapperStyles}>
107
+ {parameters && <TextArea onChange={onChangeParametersJson} value={parametersJson} />}
108
+ </div>
109
+ <h3>State:</h3>
110
+ <div css={codeWrapperStyles}>
111
+ {parameters && (
112
+ <CodeBlock
113
+ language="json"
114
+ text={JSON.stringify(parameters, null, 4)}
115
+ showLineNumbers={false}
116
+ />
117
+ )}
118
+ </div>
119
+ </div>
120
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
121
+ <div css={column(500)} key="fields-definition">
122
+ <h3>Fields definition:</h3>
123
+ <div css={codeWrapperStyles}>
124
+ <CodeBlock
125
+ language="json"
126
+ text={JSON.stringify(fields, null, 4)}
127
+ showLineNumbers={false}
128
+ />
129
+ </div>
130
+ </div>
131
+ </div>
132
+ );
145
133
  }
146
134
 
147
135
  const addHashToTheUrl = (extensionPath: string): void => {
148
- // @ts-expect-error
149
- window.top.location.hash = extensionPath;
136
+ // @ts-expect-error
137
+ window.top.location.hash = extensionPath;
150
138
  };
151
139
 
152
140
  const getHashFromUrl = (): string =>
153
- // @ts-expect-error
154
- window.top.location.hash &&
155
- // @ts-expect-error
156
- decodeURIComponent(window.top.location.hash.slice(1));
141
+ // @ts-expect-error
142
+ window.top.location.hash &&
143
+ // @ts-expect-error
144
+ decodeURIComponent(window.top.location.hash.slice(1));
157
145
 
158
146
  export default function ConfigPanelWithExtensionPicker({
159
- extensionProvider,
160
- parameters = {},
147
+ extensionProvider,
148
+ parameters = {},
161
149
  }: {
162
- extensionProvider: ExtensionProvider;
163
- parameters?: Parameters;
150
+ extensionProvider: ExtensionProvider;
151
+ parameters?: Parameters;
164
152
  }) {
165
- const [hash, setHash] = useState<string>(getHashFromUrl());
166
- const [extensionNode, setNodeAndParameters] = useState<CallbackParams>();
167
- const [item, setItem] = useState<ExtensionModule>();
168
- const [extensionKey, nodeKey] = getExtensionKeyAndNodeKey(
169
- hash,
170
- extensionNode && extensionNode.extension
171
- ? extensionNode.extension.type
172
- : '',
173
- );
174
-
175
- const actualParameters =
176
- extensionNode &&
177
- extensionNode.parameters &&
178
- Object.keys(extensionNode.parameters).length > 0
179
- ? extensionNode.parameters
180
- : parameters;
181
-
182
- return (
183
- <IntlProvider locale="en-AU">
184
- <Box xcss={wrapperStyles}>
185
- <div style={{ float: 'left' }} key="panel">
186
- {extensionNode?.node && item && (
187
- <ExtensionConfigPanel
188
- key={hash}
189
- extension={extensionNode.extension}
190
- extensionProvider={extensionProvider}
191
- nodeKey={nodeKey}
192
- node={extensionNode.node}
193
- item={item}
194
- parameters={actualParameters}
195
- />
196
- )}
197
- </div>
198
- <div style={{ float: 'right' }} key="picker">
199
- <ExtensionNodePicker
200
- selectedExtension={extensionKey}
201
- selectedNode={nodeKey}
202
- extensionProvider={extensionProvider}
203
- onSelect={params => {
204
- setNodeAndParameters(params);
205
- setItem(params.item);
206
-
207
- if (params.extension) {
208
- const hash = `${params.extension.key}:${params.nodeKey}`;
209
- addHashToTheUrl(hash);
210
- setHash(hash);
211
- }
212
- }}
213
- />
214
- </div>
215
- </Box>
216
- </IntlProvider>
217
- );
153
+ const [hash, setHash] = useState<string>(getHashFromUrl());
154
+ const [extensionNode, setNodeAndParameters] = useState<CallbackParams>();
155
+ const [item, setItem] = useState<ExtensionModule>();
156
+ const [extensionKey, nodeKey] = getExtensionKeyAndNodeKey(
157
+ hash,
158
+ extensionNode && extensionNode.extension ? extensionNode.extension.type : '',
159
+ );
160
+
161
+ const actualParameters =
162
+ extensionNode && extensionNode.parameters && Object.keys(extensionNode.parameters).length > 0
163
+ ? extensionNode.parameters
164
+ : parameters;
165
+
166
+ return (
167
+ <IntlProvider locale="en-AU">
168
+ <Box xcss={wrapperStyles}>
169
+ {/* eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 */}
170
+ <div style={{ float: 'left' }} key="panel">
171
+ {extensionNode?.node && item && (
172
+ <ExtensionConfigPanel
173
+ key={hash}
174
+ extension={extensionNode.extension}
175
+ extensionProvider={extensionProvider}
176
+ nodeKey={nodeKey}
177
+ node={extensionNode.node}
178
+ item={item}
179
+ parameters={actualParameters}
180
+ />
181
+ )}
182
+ </div>
183
+ {/* eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 */}
184
+ <div style={{ float: 'right' }} key="picker">
185
+ <ExtensionNodePicker
186
+ selectedExtension={extensionKey}
187
+ selectedNode={nodeKey}
188
+ extensionProvider={extensionProvider}
189
+ onSelect={(params) => {
190
+ setNodeAndParameters(params);
191
+ setItem(params.item);
192
+
193
+ if (params.extension) {
194
+ const hash = `${params.extension.key}:${params.nodeKey}`;
195
+ addHashToTheUrl(hash);
196
+ setHash(hash);
197
+ }
198
+ }}
199
+ />
200
+ </div>
201
+ </Box>
202
+ </IntlProvider>
203
+ );
218
204
  }
@@ -3,49 +3,49 @@ import React from 'react';
3
3
  import { IntlProvider } from 'react-intl-next';
4
4
 
5
5
  import type {
6
- ExtensionKey,
7
- ExtensionProvider,
8
- ExtensionType,
9
- Parameters,
6
+ ExtensionKey,
7
+ ExtensionProvider,
8
+ ExtensionType,
9
+ Parameters,
10
10
  } from '@atlaskit/editor-common/extensions';
11
11
 
12
12
  import ConfigPanel from '../../src/ui/ConfigPanel';
13
13
 
14
14
  export default function ConfigPanelWithProviders({
15
- extensionType,
16
- extensionKey,
17
- nodeKey,
18
- extensionProvider,
19
- parameters,
20
- onChange,
15
+ extensionType,
16
+ extensionKey,
17
+ nodeKey,
18
+ extensionProvider,
19
+ parameters,
20
+ onChange,
21
21
  }: {
22
- extensionType: ExtensionType;
23
- extensionKey: ExtensionKey;
24
- nodeKey: string;
25
- extensionProvider: ExtensionProvider;
26
- parameters: Parameters;
27
- onChange?: (parameters: Parameters) => void;
22
+ extensionType: ExtensionType;
23
+ extensionKey: ExtensionKey;
24
+ nodeKey: string;
25
+ extensionProvider: ExtensionProvider;
26
+ parameters: Parameters;
27
+ onChange?: (parameters: Parameters) => void;
28
28
  }) {
29
- function _onChange(data: Parameters) {
30
- if (onChange) {
31
- onChange(data);
32
- }
33
- }
29
+ function _onChange(data: Parameters) {
30
+ if (onChange) {
31
+ onChange(data);
32
+ }
33
+ }
34
34
 
35
- return (
36
- <IntlProvider locale="en">
37
- <ConfigPanel
38
- api={undefined}
39
- extensionType={extensionType}
40
- extensionKey={extensionKey}
41
- nodeKey={nodeKey}
42
- extensionProvider={extensionProvider}
43
- parameters={parameters}
44
- showHeader
45
- onChange={_onChange}
46
- // eslint-disable-next-line no-console
47
- onCancel={() => console.log('onCancel')}
48
- />
49
- </IntlProvider>
50
- );
35
+ return (
36
+ <IntlProvider locale="en">
37
+ <ConfigPanel
38
+ api={undefined}
39
+ extensionType={extensionType}
40
+ extensionKey={extensionKey}
41
+ nodeKey={nodeKey}
42
+ extensionProvider={extensionProvider}
43
+ parameters={parameters}
44
+ showHeader
45
+ onChange={_onChange}
46
+ // eslint-disable-next-line no-console
47
+ onCancel={() => console.log('onCancel')}
48
+ />
49
+ </IntlProvider>
50
+ );
51
51
  }