@atlaskit/renderer 131.0.0 → 131.1.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/CHANGELOG.md +17 -0
- package/dist/cjs/react/utils/EditorMediaClientProvider.js +43 -2
- package/dist/cjs/ui/Renderer/index.js +1 -1
- package/dist/es2019/react/utils/EditorMediaClientProvider.js +42 -3
- package/dist/es2019/ui/Renderer/index.js +1 -1
- package/dist/esm/react/utils/EditorMediaClientProvider.js +44 -3
- package/dist/esm/ui/Renderer/index.js +1 -1
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 131.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 131.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`3e32ed83c03e3`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/3e32ed83c03e3) -
|
|
14
|
+
DITOR-679 improve media provider
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
|
|
3
20
|
## 131.0.0
|
|
4
21
|
|
|
5
22
|
### Major Changes
|
|
@@ -15,7 +15,9 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
15
15
|
var EditorMediaClientProvider = exports.EditorMediaClientProvider = function EditorMediaClientProvider(_ref) {
|
|
16
16
|
var children = _ref.children,
|
|
17
17
|
ssr = _ref.ssr;
|
|
18
|
-
var _useState = (0, _react.useState)()
|
|
18
|
+
var _useState = (0, _react.useState)(function () {
|
|
19
|
+
return (0, _expValEquals.expValEquals)('platform_editor_media_reliability_enhancements', 'isEnabled', true) ? ssr === null || ssr === void 0 ? void 0 : ssr.config : undefined;
|
|
20
|
+
}),
|
|
19
21
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
20
22
|
mediaClientConfig = _useState2[0],
|
|
21
23
|
setMediaClientConfig = _useState2[1];
|
|
@@ -51,7 +53,46 @@ var EditorMediaClientProvider = exports.EditorMediaClientProvider = function Edi
|
|
|
51
53
|
// and provide a top level mediaClient context
|
|
52
54
|
// This is useful for testing and creating examples.
|
|
53
55
|
|
|
56
|
+
// When the experiment is enabled, use useEffect instead of useLayoutEffect because:
|
|
57
|
+
// - For the ssr.config branch: useState is already initialised with ssr.config, so this
|
|
58
|
+
// effect is a no-op on first render — the "before paint" guarantee is irrelevant.
|
|
59
|
+
// - For the mediaProvider branch: the actual work happens inside a Promise callback which
|
|
60
|
+
// resolves asynchronously, so it can never run before paint regardless of which hook
|
|
61
|
+
// schedules it — useLayoutEffect's guarantee is equally irrelevant here.
|
|
62
|
+
// The legacy path keeps useLayoutEffect to preserve existing behaviour when the experiment is off.
|
|
63
|
+
//
|
|
64
|
+
// The two hooks below are mutually exclusive — only one runs per render — so there is no
|
|
65
|
+
// actual chaining of state updates at runtime. The lint rule cannot statically prove this.
|
|
66
|
+
(0, _react.useEffect)(function () {
|
|
67
|
+
if (!(0, _expValEquals.expValEquals)('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
71
|
+
// eslint-disable-next-line @atlassian/perf-linting/no-chain-state-updates
|
|
72
|
+
setMediaClientConfig(ssr.config);
|
|
73
|
+
} else if (mediaProvider) {
|
|
74
|
+
var cancelled = false;
|
|
75
|
+
// Cancellation flag prevents setMediaClientConfig from being called after
|
|
76
|
+
// unmount or when mediaProvider changes mid-flight (stale promise fix).
|
|
77
|
+
// No .catch() is needed — the media provider is not expected to reject,
|
|
78
|
+
// and a catch handler would be a no-op anyway.
|
|
79
|
+
mediaProvider.then(function (provider) {
|
|
80
|
+
if (!cancelled) {
|
|
81
|
+
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return function () {
|
|
85
|
+
cancelled = true;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
89
|
+
|
|
90
|
+
// Legacy path (experiment off): keep useLayoutEffect to preserve existing behaviour.
|
|
91
|
+
// remove this when clean up platform_editor_media_reliability_enhancements
|
|
54
92
|
(0, _react.useLayoutEffect)(function () {
|
|
93
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
55
96
|
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
56
97
|
setMediaClientConfig(ssr.config);
|
|
57
98
|
} else if (mediaProvider) {
|
|
@@ -59,7 +100,7 @@ var EditorMediaClientProvider = exports.EditorMediaClientProvider = function Edi
|
|
|
59
100
|
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
60
101
|
});
|
|
61
102
|
}
|
|
62
|
-
}, [mediaProvider, ssr]);
|
|
103
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
63
104
|
return /*#__PURE__*/_react.default.createElement(_mediaClientReact.MediaClientContext.Provider, {
|
|
64
105
|
value: shouldSkipContext ? mediaClient : contextMediaClient
|
|
65
106
|
}, children);
|
|
@@ -71,7 +71,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
71
71
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
72
72
|
var RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
73
73
|
var packageName = "@atlaskit/renderer";
|
|
74
|
-
var packageVersion = "
|
|
74
|
+
var packageVersion = "131.1.0";
|
|
75
75
|
var setAsQueryContainerStyles = (0, _react2.css)({
|
|
76
76
|
containerName: 'ak-renderer-wrapper',
|
|
77
77
|
containerType: 'inline-size'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useLayoutEffect, useMemo, useState } from 'react';
|
|
1
|
+
import React, { useContext, useEffect, useLayoutEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { MediaClientContext, getMediaClient } from '@atlaskit/media-client-react';
|
|
3
3
|
import { useProviderFactory, useProviderLayout } from '@atlaskit/editor-common/provider-factory';
|
|
4
4
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
@@ -6,7 +6,7 @@ export const EditorMediaClientProvider = ({
|
|
|
6
6
|
children,
|
|
7
7
|
ssr
|
|
8
8
|
}) => {
|
|
9
|
-
const [mediaClientConfig, setMediaClientConfig] = useState();
|
|
9
|
+
const [mediaClientConfig, setMediaClientConfig] = useState(() => expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true) ? ssr === null || ssr === void 0 ? void 0 : ssr.config : undefined);
|
|
10
10
|
const providerFactory = useProviderFactory();
|
|
11
11
|
const mediaProvider = useProviderLayout('mediaProvider');
|
|
12
12
|
|
|
@@ -37,7 +37,46 @@ export const EditorMediaClientProvider = ({
|
|
|
37
37
|
// and provide a top level mediaClient context
|
|
38
38
|
// This is useful for testing and creating examples.
|
|
39
39
|
|
|
40
|
+
// When the experiment is enabled, use useEffect instead of useLayoutEffect because:
|
|
41
|
+
// - For the ssr.config branch: useState is already initialised with ssr.config, so this
|
|
42
|
+
// effect is a no-op on first render — the "before paint" guarantee is irrelevant.
|
|
43
|
+
// - For the mediaProvider branch: the actual work happens inside a Promise callback which
|
|
44
|
+
// resolves asynchronously, so it can never run before paint regardless of which hook
|
|
45
|
+
// schedules it — useLayoutEffect's guarantee is equally irrelevant here.
|
|
46
|
+
// The legacy path keeps useLayoutEffect to preserve existing behaviour when the experiment is off.
|
|
47
|
+
//
|
|
48
|
+
// The two hooks below are mutually exclusive — only one runs per render — so there is no
|
|
49
|
+
// actual chaining of state updates at runtime. The lint rule cannot statically prove this.
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (!expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
55
|
+
// eslint-disable-next-line @atlassian/perf-linting/no-chain-state-updates
|
|
56
|
+
setMediaClientConfig(ssr.config);
|
|
57
|
+
} else if (mediaProvider) {
|
|
58
|
+
let cancelled = false;
|
|
59
|
+
// Cancellation flag prevents setMediaClientConfig from being called after
|
|
60
|
+
// unmount or when mediaProvider changes mid-flight (stale promise fix).
|
|
61
|
+
// No .catch() is needed — the media provider is not expected to reject,
|
|
62
|
+
// and a catch handler would be a no-op anyway.
|
|
63
|
+
mediaProvider.then(provider => {
|
|
64
|
+
if (!cancelled) {
|
|
65
|
+
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return () => {
|
|
69
|
+
cancelled = true;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
73
|
+
|
|
74
|
+
// Legacy path (experiment off): keep useLayoutEffect to preserve existing behaviour.
|
|
75
|
+
// remove this when clean up platform_editor_media_reliability_enhancements
|
|
40
76
|
useLayoutEffect(() => {
|
|
77
|
+
if (expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
41
80
|
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
42
81
|
setMediaClientConfig(ssr.config);
|
|
43
82
|
} else if (mediaProvider) {
|
|
@@ -45,7 +84,7 @@ export const EditorMediaClientProvider = ({
|
|
|
45
84
|
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
46
85
|
});
|
|
47
86
|
}
|
|
48
|
-
}, [mediaProvider, ssr]);
|
|
87
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
49
88
|
return /*#__PURE__*/React.createElement(MediaClientContext.Provider, {
|
|
50
89
|
value: shouldSkipContext ? mediaClient : contextMediaClient
|
|
51
90
|
}, children);
|
|
@@ -57,7 +57,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
57
57
|
const TABLE_INFO_TIMEOUT = 10000;
|
|
58
58
|
const RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
59
59
|
const packageName = "@atlaskit/renderer";
|
|
60
|
-
const packageVersion = "
|
|
60
|
+
const packageVersion = "131.1.0";
|
|
61
61
|
const setAsQueryContainerStyles = css({
|
|
62
62
|
containerName: 'ak-renderer-wrapper',
|
|
63
63
|
containerType: 'inline-size'
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import React, { useContext, useLayoutEffect, useMemo, useState } from 'react';
|
|
2
|
+
import React, { useContext, useEffect, useLayoutEffect, useMemo, useState } from 'react';
|
|
3
3
|
import { MediaClientContext, getMediaClient } from '@atlaskit/media-client-react';
|
|
4
4
|
import { useProviderFactory, useProviderLayout } from '@atlaskit/editor-common/provider-factory';
|
|
5
5
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
6
6
|
export var EditorMediaClientProvider = function EditorMediaClientProvider(_ref) {
|
|
7
7
|
var children = _ref.children,
|
|
8
8
|
ssr = _ref.ssr;
|
|
9
|
-
var _useState = useState()
|
|
9
|
+
var _useState = useState(function () {
|
|
10
|
+
return expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true) ? ssr === null || ssr === void 0 ? void 0 : ssr.config : undefined;
|
|
11
|
+
}),
|
|
10
12
|
_useState2 = _slicedToArray(_useState, 2),
|
|
11
13
|
mediaClientConfig = _useState2[0],
|
|
12
14
|
setMediaClientConfig = _useState2[1];
|
|
@@ -42,7 +44,46 @@ export var EditorMediaClientProvider = function EditorMediaClientProvider(_ref)
|
|
|
42
44
|
// and provide a top level mediaClient context
|
|
43
45
|
// This is useful for testing and creating examples.
|
|
44
46
|
|
|
47
|
+
// When the experiment is enabled, use useEffect instead of useLayoutEffect because:
|
|
48
|
+
// - For the ssr.config branch: useState is already initialised with ssr.config, so this
|
|
49
|
+
// effect is a no-op on first render — the "before paint" guarantee is irrelevant.
|
|
50
|
+
// - For the mediaProvider branch: the actual work happens inside a Promise callback which
|
|
51
|
+
// resolves asynchronously, so it can never run before paint regardless of which hook
|
|
52
|
+
// schedules it — useLayoutEffect's guarantee is equally irrelevant here.
|
|
53
|
+
// The legacy path keeps useLayoutEffect to preserve existing behaviour when the experiment is off.
|
|
54
|
+
//
|
|
55
|
+
// The two hooks below are mutually exclusive — only one runs per render — so there is no
|
|
56
|
+
// actual chaining of state updates at runtime. The lint rule cannot statically prove this.
|
|
57
|
+
useEffect(function () {
|
|
58
|
+
if (!expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
62
|
+
// eslint-disable-next-line @atlassian/perf-linting/no-chain-state-updates
|
|
63
|
+
setMediaClientConfig(ssr.config);
|
|
64
|
+
} else if (mediaProvider) {
|
|
65
|
+
var cancelled = false;
|
|
66
|
+
// Cancellation flag prevents setMediaClientConfig from being called after
|
|
67
|
+
// unmount or when mediaProvider changes mid-flight (stale promise fix).
|
|
68
|
+
// No .catch() is needed — the media provider is not expected to reject,
|
|
69
|
+
// and a catch handler would be a no-op anyway.
|
|
70
|
+
mediaProvider.then(function (provider) {
|
|
71
|
+
if (!cancelled) {
|
|
72
|
+
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return function () {
|
|
76
|
+
cancelled = true;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
80
|
+
|
|
81
|
+
// Legacy path (experiment off): keep useLayoutEffect to preserve existing behaviour.
|
|
82
|
+
// remove this when clean up platform_editor_media_reliability_enhancements
|
|
45
83
|
useLayoutEffect(function () {
|
|
84
|
+
if (expValEquals('platform_editor_media_reliability_enhancements', 'isEnabled', true)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
46
87
|
if (ssr !== null && ssr !== void 0 && ssr.config) {
|
|
47
88
|
setMediaClientConfig(ssr.config);
|
|
48
89
|
} else if (mediaProvider) {
|
|
@@ -50,7 +91,7 @@ export var EditorMediaClientProvider = function EditorMediaClientProvider(_ref)
|
|
|
50
91
|
setMediaClientConfig(provider.viewMediaClientConfig);
|
|
51
92
|
});
|
|
52
93
|
}
|
|
53
|
-
}, [mediaProvider, ssr]);
|
|
94
|
+
}, [mediaProvider, ssr === null || ssr === void 0 ? void 0 : ssr.config]);
|
|
54
95
|
return /*#__PURE__*/React.createElement(MediaClientContext.Provider, {
|
|
55
96
|
value: shouldSkipContext ? mediaClient : contextMediaClient
|
|
56
97
|
}, children);
|
|
@@ -62,7 +62,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
62
62
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
63
63
|
var RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
64
64
|
var packageName = "@atlaskit/renderer";
|
|
65
|
-
var packageVersion = "
|
|
65
|
+
var packageVersion = "131.1.0";
|
|
66
66
|
var setAsQueryContainerStyles = css({
|
|
67
67
|
containerName: 'ak-renderer-wrapper',
|
|
68
68
|
containerType: 'inline-size'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "131.
|
|
3
|
+
"version": "131.1.1",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@atlaskit/adf-schema": "^52.
|
|
34
|
-
"@atlaskit/adf-utils": "^19.
|
|
33
|
+
"@atlaskit/adf-schema": "^52.13.0",
|
|
34
|
+
"@atlaskit/adf-utils": "^19.30.0",
|
|
35
35
|
"@atlaskit/afm-i18n-platform-editor-renderer": "2.10.0",
|
|
36
36
|
"@atlaskit/analytics-listeners": "^10.1.0",
|
|
37
37
|
"@atlaskit/analytics-namespaced-context": "^7.3.0",
|
|
38
38
|
"@atlaskit/analytics-next": "^11.2.0",
|
|
39
|
-
"@atlaskit/browser-apis": "^0.0.
|
|
39
|
+
"@atlaskit/browser-apis": "^0.0.2",
|
|
40
40
|
"@atlaskit/button": "^23.11.0",
|
|
41
41
|
"@atlaskit/code": "^17.5.0",
|
|
42
42
|
"@atlaskit/editor-json-transformer": "^8.32.0",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
"@atlaskit/editor-prosemirror": "^7.3.0",
|
|
45
45
|
"@atlaskit/editor-shared-styles": "^3.11.0",
|
|
46
46
|
"@atlaskit/editor-smart-link-draggable": "^0.5.0",
|
|
47
|
-
"@atlaskit/emoji": "^70.
|
|
47
|
+
"@atlaskit/emoji": "^70.10.0",
|
|
48
48
|
"@atlaskit/feature-gate-js-client": "^5.7.0",
|
|
49
49
|
"@atlaskit/icon": "^35.0.0",
|
|
50
50
|
"@atlaskit/link": "^3.4.0",
|
|
51
|
-
"@atlaskit/link-datasource": "^5.
|
|
51
|
+
"@atlaskit/link-datasource": "^5.3.0",
|
|
52
52
|
"@atlaskit/link-extractors": "^2.6.0",
|
|
53
53
|
"@atlaskit/linking-common": "^9.11.0",
|
|
54
54
|
"@atlaskit/media-card": "^80.5.0",
|
|
@@ -61,12 +61,12 @@
|
|
|
61
61
|
"@atlaskit/platform-feature-flags": "^1.1.0",
|
|
62
62
|
"@atlaskit/platform-feature-flags-react": "^0.5.0",
|
|
63
63
|
"@atlaskit/pragmatic-drag-and-drop": "^1.8.0",
|
|
64
|
-
"@atlaskit/react-ufo": "^5.
|
|
64
|
+
"@atlaskit/react-ufo": "^5.22.0",
|
|
65
65
|
"@atlaskit/smart-card": "^44.12.0",
|
|
66
66
|
"@atlaskit/status": "^4.1.0",
|
|
67
67
|
"@atlaskit/task-decision": "^20.1.0",
|
|
68
68
|
"@atlaskit/theme": "^23.2.0",
|
|
69
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
69
|
+
"@atlaskit/tmp-editor-statsig": "^82.0.0",
|
|
70
70
|
"@atlaskit/tokens": "^13.0.0",
|
|
71
71
|
"@atlaskit/tooltip": "^22.2.0",
|
|
72
72
|
"@atlaskit/visually-hidden": "^3.1.0",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"uuid": "^3.1.0"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@atlaskit/editor-common": "^114.
|
|
83
|
+
"@atlaskit/editor-common": "^114.36.0",
|
|
84
84
|
"@atlaskit/link-provider": "^4.4.0",
|
|
85
85
|
"@atlaskit/media-core": "^37.1.0",
|
|
86
86
|
"react": "^18.2.0",
|
|
@@ -98,13 +98,13 @@
|
|
|
98
98
|
"@atlaskit/media-integration-test-helpers": "workspace:^",
|
|
99
99
|
"@atlaskit/media-test-helpers": "^41.1.0",
|
|
100
100
|
"@atlaskit/mention": "^26.0.0",
|
|
101
|
-
"@atlaskit/modal-dialog": "^15.
|
|
101
|
+
"@atlaskit/modal-dialog": "^15.1.0",
|
|
102
102
|
"@atlaskit/navigation-system": "^9.4.0",
|
|
103
103
|
"@atlaskit/profilecard": "^25.7.0",
|
|
104
104
|
"@atlaskit/side-nav-items": "^1.13.0",
|
|
105
|
-
"@atlaskit/util-data-test": "^18.
|
|
105
|
+
"@atlaskit/util-data-test": "^18.6.0",
|
|
106
106
|
"@atlassian/a11y-jest-testing": "^0.11.0",
|
|
107
|
-
"@atlassian/a11y-playwright-testing": "^0.
|
|
107
|
+
"@atlassian/a11y-playwright-testing": "^0.10.0",
|
|
108
108
|
"@atlassian/feature-flags-test-utils": "^1.1.0",
|
|
109
109
|
"@atlassian/react-compiler-gating": "workspace:^",
|
|
110
110
|
"@atlassian/structured-docs-types": "workspace:^",
|