@atlaskit/editor-core 196.0.0 → 196.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/composable-editor/editor-internal.js +7 -2
- package/dist/cjs/composable-editor/hooks/useProviders.js +8 -1
- package/dist/cjs/composable-editor/utils/handleProviders.js +2 -1
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/es2019/composable-editor/editor-internal.js +7 -2
- package/dist/es2019/composable-editor/hooks/useProviders.js +8 -1
- package/dist/es2019/composable-editor/utils/handleProviders.js +3 -1
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/esm/composable-editor/editor-internal.js +7 -2
- package/dist/esm/composable-editor/hooks/useProviders.js +8 -1
- package/dist/esm/composable-editor/utils/handleProviders.js +3 -1
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/types/composable-editor/hooks/useProviders.d.ts +3 -2
- package/dist/types-ts4.5/composable-editor/hooks/useProviders.d.ts +3 -2
- package/package.json +8 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/editor-core
|
|
2
2
|
|
|
3
|
+
## 196.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`c4d2eb3f9f965`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c4d2eb3f9f965) -
|
|
8
|
+
[ux] Fix issue with card provider not updating asynchronously
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- [`84c0869e8c5c6`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/84c0869e8c5c6) -
|
|
13
|
+
remove unused cardview refactor FF and components
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
3
16
|
## 196.0.0
|
|
4
17
|
|
|
5
18
|
### Major Changes
|
|
@@ -147,7 +147,7 @@ var EditorInternal = exports.EditorInternal = /*#__PURE__*/(0, _react.memo)(func
|
|
|
147
147
|
}), (0, _react2.jsx)(PortalRenderer, null))))))));
|
|
148
148
|
});
|
|
149
149
|
function ReactEditorViewContextWrapper(props) {
|
|
150
|
-
var _props$editorProps$me;
|
|
150
|
+
var _props$editorProps$me, _props$editorProps$li;
|
|
151
151
|
var setInternalEditorAPI = (0, _context.useSetPresetContext)();
|
|
152
152
|
var setExternalEditorAPI = props.setEditorApi;
|
|
153
153
|
|
|
@@ -165,9 +165,14 @@ function ReactEditorViewContextWrapper(props) {
|
|
|
165
165
|
setInternalEditorAPI === null || setInternalEditorAPI === void 0 || setInternalEditorAPI(api);
|
|
166
166
|
setExternalEditorAPI === null || setExternalEditorAPI === void 0 || setExternalEditorAPI(api);
|
|
167
167
|
}, [setInternalEditorAPI, setExternalEditorAPI]);
|
|
168
|
+
|
|
169
|
+
// TODO: Remove these when we deprecate these props from editor-props - smartLinks is unfortunately still used in some places, we can sidestep this problem if we move everyone across to ComposableEditor and deprecate Editor
|
|
170
|
+
var UNSAFE_cards = props.editorProps.UNSAFE_cards;
|
|
171
|
+
var smartLinks = props.editorProps.smartLinks;
|
|
168
172
|
(0, _useProviders.useProviders)({
|
|
169
173
|
contextIdentifierProvider: props.editorProps.contextIdentifierProvider,
|
|
170
|
-
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider
|
|
174
|
+
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider,
|
|
175
|
+
cardProvider: ((_props$editorProps$li = props.editorProps.linking) === null || _props$editorProps$li === void 0 || (_props$editorProps$li = _props$editorProps$li.smartLinks) === null || _props$editorProps$li === void 0 ? void 0 : _props$editorProps$li.provider) || smartLinks && smartLinks.provider || UNSAFE_cards && UNSAFE_cards.provider
|
|
171
176
|
});
|
|
172
177
|
return (0, _react2.jsx)(_ReactEditorView.default, (0, _extends2.default)({}, props, {
|
|
173
178
|
setEditorApi: setEditorAPI
|
|
@@ -19,7 +19,8 @@ var _context2 = require("../../presets/context");
|
|
|
19
19
|
*/
|
|
20
20
|
var useProviders = exports.useProviders = function useProviders(_ref) {
|
|
21
21
|
var contextIdentifierProvider = _ref.contextIdentifierProvider,
|
|
22
|
-
mediaProvider = _ref.mediaProvider
|
|
22
|
+
mediaProvider = _ref.mediaProvider,
|
|
23
|
+
cardProvider = _ref.cardProvider;
|
|
23
24
|
var editorApi = (0, _context2.usePresetContext)();
|
|
24
25
|
(0, _react.useEffect)(function () {
|
|
25
26
|
function setProvider() {
|
|
@@ -61,4 +62,10 @@ var useProviders = exports.useProviders = function useProviders(_ref) {
|
|
|
61
62
|
editorApi === null || editorApi === void 0 || (_editorApi$media = editorApi.media) === null || _editorApi$media === void 0 || _editorApi$media.actions.setProvider(mediaProvider);
|
|
62
63
|
}
|
|
63
64
|
}, [mediaProvider, editorApi]);
|
|
65
|
+
(0, _react.useEffect)(function () {
|
|
66
|
+
if (cardProvider) {
|
|
67
|
+
var _editorApi$card;
|
|
68
|
+
editorApi === null || editorApi === void 0 || (_editorApi$card = editorApi.card) === null || _editorApi$card === void 0 || _editorApi$card.actions.setProvider(cardProvider);
|
|
69
|
+
}
|
|
70
|
+
}, [cardProvider, editorApi]);
|
|
64
71
|
};
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = handleProviders;
|
|
7
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
7
8
|
/**
|
|
8
9
|
*
|
|
9
10
|
* Utility to set all the providers on a provider factory
|
|
@@ -37,7 +38,7 @@ function handleProviders(providerFactory, _ref, extensionProvider, quickInsertPr
|
|
|
37
38
|
providerFactory.setProvider('searchProvider', searchProvider);
|
|
38
39
|
providerFactory.setProvider('presenceProvider', presenceProvider);
|
|
39
40
|
providerFactory.setProvider('macroProvider', macroProvider);
|
|
40
|
-
if (
|
|
41
|
+
if (!(0, _platformFeatureFlags.fg)('platform_editor_card_provider_from_plugin_config')) {
|
|
41
42
|
providerFactory.setProvider('cardProvider', cardProvider);
|
|
42
43
|
}
|
|
43
44
|
providerFactory.setProvider('autoformattingProvider', autoformattingProvider);
|
|
@@ -139,7 +139,7 @@ export const EditorInternal = /*#__PURE__*/memo(({
|
|
|
139
139
|
}), jsx(PortalRenderer, null))))))));
|
|
140
140
|
});
|
|
141
141
|
function ReactEditorViewContextWrapper(props) {
|
|
142
|
-
var _props$editorProps$me;
|
|
142
|
+
var _props$editorProps$me, _props$editorProps$li, _props$editorProps$li2;
|
|
143
143
|
const setInternalEditorAPI = useSetPresetContext();
|
|
144
144
|
const {
|
|
145
145
|
setEditorApi: setExternalEditorAPI
|
|
@@ -159,9 +159,14 @@ function ReactEditorViewContextWrapper(props) {
|
|
|
159
159
|
setInternalEditorAPI === null || setInternalEditorAPI === void 0 ? void 0 : setInternalEditorAPI(api);
|
|
160
160
|
setExternalEditorAPI === null || setExternalEditorAPI === void 0 ? void 0 : setExternalEditorAPI(api);
|
|
161
161
|
}, [setInternalEditorAPI, setExternalEditorAPI]);
|
|
162
|
+
|
|
163
|
+
// TODO: Remove these when we deprecate these props from editor-props - smartLinks is unfortunately still used in some places, we can sidestep this problem if we move everyone across to ComposableEditor and deprecate Editor
|
|
164
|
+
const UNSAFE_cards = props.editorProps.UNSAFE_cards;
|
|
165
|
+
const smartLinks = props.editorProps.smartLinks;
|
|
162
166
|
useProviders({
|
|
163
167
|
contextIdentifierProvider: props.editorProps.contextIdentifierProvider,
|
|
164
|
-
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider
|
|
168
|
+
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider,
|
|
169
|
+
cardProvider: ((_props$editorProps$li = props.editorProps.linking) === null || _props$editorProps$li === void 0 ? void 0 : (_props$editorProps$li2 = _props$editorProps$li.smartLinks) === null || _props$editorProps$li2 === void 0 ? void 0 : _props$editorProps$li2.provider) || smartLinks && smartLinks.provider || UNSAFE_cards && UNSAFE_cards.provider
|
|
165
170
|
});
|
|
166
171
|
return jsx(ReactEditorView, _extends({}, props, {
|
|
167
172
|
setEditorApi: setEditorAPI
|
|
@@ -10,7 +10,8 @@ import { usePresetContext } from '../../presets/context';
|
|
|
10
10
|
*/
|
|
11
11
|
export const useProviders = ({
|
|
12
12
|
contextIdentifierProvider,
|
|
13
|
-
mediaProvider
|
|
13
|
+
mediaProvider,
|
|
14
|
+
cardProvider
|
|
14
15
|
}) => {
|
|
15
16
|
const editorApi = usePresetContext();
|
|
16
17
|
useEffect(() => {
|
|
@@ -32,4 +33,10 @@ export const useProviders = ({
|
|
|
32
33
|
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$media = editorApi.media) === null || _editorApi$media === void 0 ? void 0 : _editorApi$media.actions.setProvider(mediaProvider);
|
|
33
34
|
}
|
|
34
35
|
}, [mediaProvider, editorApi]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (cardProvider) {
|
|
38
|
+
var _editorApi$card;
|
|
39
|
+
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$card = editorApi.card) === null || _editorApi$card === void 0 ? void 0 : _editorApi$card.actions.setProvider(cardProvider);
|
|
40
|
+
}
|
|
41
|
+
}, [cardProvider, editorApi]);
|
|
35
42
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* Utility to set all the providers on a provider factory
|
|
@@ -32,7 +34,7 @@ export default function handleProviders(providerFactory, {
|
|
|
32
34
|
providerFactory.setProvider('searchProvider', searchProvider);
|
|
33
35
|
providerFactory.setProvider('presenceProvider', presenceProvider);
|
|
34
36
|
providerFactory.setProvider('macroProvider', macroProvider);
|
|
35
|
-
if (
|
|
37
|
+
if (!fg('platform_editor_card_provider_from_plugin_config')) {
|
|
36
38
|
providerFactory.setProvider('cardProvider', cardProvider);
|
|
37
39
|
}
|
|
38
40
|
providerFactory.setProvider('autoformattingProvider', autoformattingProvider);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = "@atlaskit/editor-core";
|
|
2
|
-
export const version = "196.
|
|
2
|
+
export const version = "196.1.0";
|
|
@@ -143,7 +143,7 @@ export var EditorInternal = /*#__PURE__*/memo(function (_ref) {
|
|
|
143
143
|
}), jsx(PortalRenderer, null))))))));
|
|
144
144
|
});
|
|
145
145
|
function ReactEditorViewContextWrapper(props) {
|
|
146
|
-
var _props$editorProps$me;
|
|
146
|
+
var _props$editorProps$me, _props$editorProps$li;
|
|
147
147
|
var setInternalEditorAPI = useSetPresetContext();
|
|
148
148
|
var setExternalEditorAPI = props.setEditorApi;
|
|
149
149
|
|
|
@@ -161,9 +161,14 @@ function ReactEditorViewContextWrapper(props) {
|
|
|
161
161
|
setInternalEditorAPI === null || setInternalEditorAPI === void 0 || setInternalEditorAPI(api);
|
|
162
162
|
setExternalEditorAPI === null || setExternalEditorAPI === void 0 || setExternalEditorAPI(api);
|
|
163
163
|
}, [setInternalEditorAPI, setExternalEditorAPI]);
|
|
164
|
+
|
|
165
|
+
// TODO: Remove these when we deprecate these props from editor-props - smartLinks is unfortunately still used in some places, we can sidestep this problem if we move everyone across to ComposableEditor and deprecate Editor
|
|
166
|
+
var UNSAFE_cards = props.editorProps.UNSAFE_cards;
|
|
167
|
+
var smartLinks = props.editorProps.smartLinks;
|
|
164
168
|
useProviders({
|
|
165
169
|
contextIdentifierProvider: props.editorProps.contextIdentifierProvider,
|
|
166
|
-
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider
|
|
170
|
+
mediaProvider: (_props$editorProps$me = props.editorProps.media) === null || _props$editorProps$me === void 0 ? void 0 : _props$editorProps$me.provider,
|
|
171
|
+
cardProvider: ((_props$editorProps$li = props.editorProps.linking) === null || _props$editorProps$li === void 0 || (_props$editorProps$li = _props$editorProps$li.smartLinks) === null || _props$editorProps$li === void 0 ? void 0 : _props$editorProps$li.provider) || smartLinks && smartLinks.provider || UNSAFE_cards && UNSAFE_cards.provider
|
|
167
172
|
});
|
|
168
173
|
return jsx(ReactEditorView, _extends({}, props, {
|
|
169
174
|
setEditorApi: setEditorAPI
|
|
@@ -12,7 +12,8 @@ import { usePresetContext } from '../../presets/context';
|
|
|
12
12
|
*/
|
|
13
13
|
export var useProviders = function useProviders(_ref) {
|
|
14
14
|
var contextIdentifierProvider = _ref.contextIdentifierProvider,
|
|
15
|
-
mediaProvider = _ref.mediaProvider
|
|
15
|
+
mediaProvider = _ref.mediaProvider,
|
|
16
|
+
cardProvider = _ref.cardProvider;
|
|
16
17
|
var editorApi = usePresetContext();
|
|
17
18
|
useEffect(function () {
|
|
18
19
|
function setProvider() {
|
|
@@ -54,4 +55,10 @@ export var useProviders = function useProviders(_ref) {
|
|
|
54
55
|
editorApi === null || editorApi === void 0 || (_editorApi$media = editorApi.media) === null || _editorApi$media === void 0 || _editorApi$media.actions.setProvider(mediaProvider);
|
|
55
56
|
}
|
|
56
57
|
}, [mediaProvider, editorApi]);
|
|
58
|
+
useEffect(function () {
|
|
59
|
+
if (cardProvider) {
|
|
60
|
+
var _editorApi$card;
|
|
61
|
+
editorApi === null || editorApi === void 0 || (_editorApi$card = editorApi.card) === null || _editorApi$card === void 0 || _editorApi$card.actions.setProvider(cardProvider);
|
|
62
|
+
}
|
|
63
|
+
}, [cardProvider, editorApi]);
|
|
57
64
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* Utility to set all the providers on a provider factory
|
|
@@ -31,7 +33,7 @@ export default function handleProviders(providerFactory, _ref, extensionProvider
|
|
|
31
33
|
providerFactory.setProvider('searchProvider', searchProvider);
|
|
32
34
|
providerFactory.setProvider('presenceProvider', presenceProvider);
|
|
33
35
|
providerFactory.setProvider('macroProvider', macroProvider);
|
|
34
|
-
if (
|
|
36
|
+
if (!fg('platform_editor_card_provider_from_plugin_config')) {
|
|
35
37
|
providerFactory.setProvider('cardProvider', cardProvider);
|
|
36
38
|
}
|
|
37
39
|
providerFactory.setProvider('autoformattingProvider', autoformattingProvider);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export var name = "@atlaskit/editor-core";
|
|
2
|
-
export var version = "196.
|
|
2
|
+
export var version = "196.1.0";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ContextIdentifierProvider, MediaProvider } from '@atlaskit/editor-common/provider-factory';
|
|
1
|
+
import type { CardProvider, ContextIdentifierProvider, MediaProvider } from '@atlaskit/editor-common/provider-factory';
|
|
2
2
|
interface UseProvidersProps {
|
|
3
3
|
contextIdentifierProvider: Promise<ContextIdentifierProvider> | undefined;
|
|
4
4
|
mediaProvider: Promise<MediaProvider> | undefined;
|
|
5
|
+
cardProvider: Promise<CardProvider> | undefined;
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* This hook is used to replace the old approach of using the `providerFactory`.
|
|
@@ -11,5 +12,5 @@ interface UseProvidersProps {
|
|
|
11
12
|
*
|
|
12
13
|
* In the future ideally consumers implement this behaviour themselves.
|
|
13
14
|
*/
|
|
14
|
-
export declare const useProviders: ({ contextIdentifierProvider, mediaProvider }: UseProvidersProps) => void;
|
|
15
|
+
export declare const useProviders: ({ contextIdentifierProvider, mediaProvider, cardProvider, }: UseProvidersProps) => void;
|
|
15
16
|
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ContextIdentifierProvider, MediaProvider } from '@atlaskit/editor-common/provider-factory';
|
|
1
|
+
import type { CardProvider, ContextIdentifierProvider, MediaProvider } from '@atlaskit/editor-common/provider-factory';
|
|
2
2
|
interface UseProvidersProps {
|
|
3
3
|
contextIdentifierProvider: Promise<ContextIdentifierProvider> | undefined;
|
|
4
4
|
mediaProvider: Promise<MediaProvider> | undefined;
|
|
5
|
+
cardProvider: Promise<CardProvider> | undefined;
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* This hook is used to replace the old approach of using the `providerFactory`.
|
|
@@ -11,5 +12,5 @@ interface UseProvidersProps {
|
|
|
11
12
|
*
|
|
12
13
|
* In the future ideally consumers implement this behaviour themselves.
|
|
13
14
|
*/
|
|
14
|
-
export declare const useProviders: ({ contextIdentifierProvider, mediaProvider }: UseProvidersProps) => void;
|
|
15
|
+
export declare const useProviders: ({ contextIdentifierProvider, mediaProvider, cardProvider, }: UseProvidersProps) => void;
|
|
15
16
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-core",
|
|
3
|
-
"version": "196.
|
|
3
|
+
"version": "196.1.0",
|
|
4
4
|
"description": "A package contains Atlassian editor core functionality",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
"@atlaskit/analytics-next": "^10.1.0",
|
|
46
46
|
"@atlaskit/analytics-next-stable-react-context": "1.0.1",
|
|
47
47
|
"@atlaskit/button": "^20.1.0",
|
|
48
|
-
"@atlaskit/editor-common": "^88.
|
|
48
|
+
"@atlaskit/editor-common": "^88.4.0",
|
|
49
49
|
"@atlaskit/editor-plugins": "^4.2.0",
|
|
50
50
|
"@atlaskit/editor-prosemirror": "5.0.1",
|
|
51
51
|
"@atlaskit/editor-shared-styles": "^2.13.0",
|
|
52
52
|
"@atlaskit/emoji": "^67.7.0",
|
|
53
53
|
"@atlaskit/icon": "^22.15.0",
|
|
54
|
-
"@atlaskit/media-card": "^78.
|
|
54
|
+
"@atlaskit/media-card": "^78.2.0",
|
|
55
55
|
"@atlaskit/mention": "^23.2.0",
|
|
56
56
|
"@atlaskit/platform-feature-flags": "^0.3.0",
|
|
57
57
|
"@atlaskit/spinner": "^16.3.0",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"react-intl-next": "npm:react-intl@^5.18.1"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@af/editor-examples-helpers": "0.3.
|
|
83
|
+
"@af/editor-examples-helpers": "0.3.4",
|
|
84
84
|
"@af/editor-libra": "*",
|
|
85
85
|
"@af/visual-regression": "*",
|
|
86
86
|
"@atlaskit/adf-utils": "^19.8.0",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@atlaskit/collab-provider": "9.37.4",
|
|
89
89
|
"@atlaskit/editor-json-transformer": "^8.18.0",
|
|
90
90
|
"@atlaskit/editor-plugin-annotation": "1.19.3",
|
|
91
|
-
"@atlaskit/editor-plugin-card": "^2.
|
|
91
|
+
"@atlaskit/editor-plugin-card": "^2.14.0",
|
|
92
92
|
"@atlaskit/editor-plugin-editor-viewmode": "^2.1.0",
|
|
93
93
|
"@atlaskit/editor-plugin-list": "^3.8.0",
|
|
94
94
|
"@atlaskit/editor-plugin-paste": "^1.11.0",
|
|
@@ -169,10 +169,6 @@
|
|
|
169
169
|
"platform.editor.table-sticky-scrollbar": {
|
|
170
170
|
"type": "boolean"
|
|
171
171
|
},
|
|
172
|
-
"platform.media-experience.card-views-refactor_b91lr": {
|
|
173
|
-
"type": "boolean",
|
|
174
|
-
"referenceOnly": "true"
|
|
175
|
-
},
|
|
176
172
|
"platform.editor.multi-bodied-extension_0rygg": {
|
|
177
173
|
"type": "boolean",
|
|
178
174
|
"referenceOnly": "true"
|
|
@@ -280,6 +276,9 @@
|
|
|
280
276
|
},
|
|
281
277
|
"platform_editor_remove_hide_avatar_group_prop": {
|
|
282
278
|
"type": "boolean"
|
|
279
|
+
},
|
|
280
|
+
"platform_editor_card_provider_from_plugin_config": {
|
|
281
|
+
"type": "boolean"
|
|
283
282
|
}
|
|
284
283
|
},
|
|
285
284
|
"stricter": {
|