@atlaskit/editor-plugin-layout 3.1.5 → 3.1.6
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 +6 -0
- package/dist/cjs/nodeviews/index.js +3 -4
- package/dist/cjs/pm-plugins/actions.js +9 -23
- package/dist/es2019/nodeviews/index.js +3 -4
- package/dist/es2019/pm-plugins/actions.js +8 -24
- package/dist/esm/nodeviews/index.js +3 -4
- package/dist/esm/pm-plugins/actions.js +9 -23
- package/dist/types/ui/icons/LayoutThreeWithLeftSidebars.d.ts +1 -1
- package/dist/types/ui/icons/LayoutThreeWithRightSidebars.d.ts +1 -1
- package/dist/types-ts4.5/ui/icons/LayoutThreeWithLeftSidebars.d.ts +1 -1
- package/dist/types-ts4.5/ui/icons/LayoutThreeWithRightSidebars.d.ts +1 -1
- package/package.json +6 -9
package/CHANGELOG.md
CHANGED
|
@@ -119,10 +119,9 @@ var LayoutBreakoutResizer = function LayoutBreakoutResizer(_ref) {
|
|
|
119
119
|
dynamicFullWidthGuidelineOffset: layoutDynamicFullWidthGuidelineOffset
|
|
120
120
|
});
|
|
121
121
|
};
|
|
122
|
-
var toDOM = function toDOM(
|
|
122
|
+
var toDOM = function toDOM() {
|
|
123
123
|
return ['div', {
|
|
124
|
-
class: 'layout-section-container'
|
|
125
|
-
'data-local-id': node.attrs.localId
|
|
124
|
+
class: 'layout-section-container'
|
|
126
125
|
}, ['div', {
|
|
127
126
|
'data-layout-section': true
|
|
128
127
|
}, 0]];
|
|
@@ -162,7 +161,7 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
|
|
|
162
161
|
return (0, _createClass2.default)(LayoutSectionView, [{
|
|
163
162
|
key: "getContentDOM",
|
|
164
163
|
value: function getContentDOM() {
|
|
165
|
-
var _ref2 = _model.DOMSerializer.renderSpec(document, toDOM(
|
|
164
|
+
var _ref2 = _model.DOMSerializer.renderSpec(document, toDOM()),
|
|
166
165
|
container = _ref2.dom,
|
|
167
166
|
contentDOM = _ref2.contentDOM;
|
|
168
167
|
|
|
@@ -8,7 +8,6 @@ exports.fixColumnStructure = exports.fixColumnSizes = exports.deleteActiveLayout
|
|
|
8
8
|
exports.forceSectionToPresetLayout = forceSectionToPresetLayout;
|
|
9
9
|
exports.setPresetLayout = exports.insertLayoutColumnsWithAnalytics = exports.insertLayoutColumns = exports.getSelectedLayout = exports.getPresetLayout = void 0;
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
var _adfSchema = require("@atlaskit/adf-schema");
|
|
12
11
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
13
12
|
var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
|
|
14
13
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
@@ -150,33 +149,23 @@ var createMultiColumnLayoutSection = exports.createMultiColumnLayoutSection = fu
|
|
|
150
149
|
length: numberOfColumns
|
|
151
150
|
}, function () {
|
|
152
151
|
return layoutColumn.createAndFill({
|
|
153
|
-
width: _consts.EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
154
|
-
localId: (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? _adfSchema.uuid.generate() : undefined
|
|
152
|
+
width: _consts.EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
155
153
|
});
|
|
156
154
|
}));
|
|
157
|
-
|
|
158
|
-
localId: _adfSchema.uuid.generate()
|
|
159
|
-
} : undefined;
|
|
160
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
155
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
161
156
|
};
|
|
162
157
|
var createDefaultLayoutSection = exports.createDefaultLayoutSection = function createDefaultLayoutSection(state) {
|
|
163
158
|
var _state$schema$nodes2 = state.schema.nodes,
|
|
164
159
|
layoutSection = _state$schema$nodes2.layoutSection,
|
|
165
160
|
layoutColumn = _state$schema$nodes2.layoutColumn;
|
|
161
|
+
|
|
166
162
|
// create a 50-50 layout by default
|
|
167
|
-
var columns = _model.Fragment.fromArray([layoutColumn.createAndFill(
|
|
163
|
+
var columns = _model.Fragment.fromArray([layoutColumn.createAndFill({
|
|
168
164
|
width: 50
|
|
169
|
-
},
|
|
170
|
-
localId: _adfSchema.uuid.generate()
|
|
171
|
-
} : undefined)), layoutColumn.createAndFill(_objectSpread({
|
|
165
|
+
}), layoutColumn.createAndFill({
|
|
172
166
|
width: 50
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
} : undefined))]);
|
|
176
|
-
var attrs = (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? {
|
|
177
|
-
localId: _adfSchema.uuid.generate()
|
|
178
|
-
} : undefined;
|
|
179
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
167
|
+
})]);
|
|
168
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
180
169
|
};
|
|
181
170
|
var insertLayoutColumns = exports.insertLayoutColumns = function insertLayoutColumns(state, dispatch) {
|
|
182
171
|
if (dispatch) {
|
|
@@ -208,16 +197,13 @@ var insertLayoutColumnsWithAnalytics = exports.insertLayoutColumnsWithAnalytics
|
|
|
208
197
|
* Add a column to the right of existing layout
|
|
209
198
|
*/
|
|
210
199
|
function addColumn(schema, pos) {
|
|
211
|
-
var attrs = (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? {
|
|
212
|
-
localId: _adfSchema.uuid.generate()
|
|
213
|
-
} : undefined;
|
|
214
200
|
if ((0, _experiments.editorExperiment)('advanced_layouts', false)) {
|
|
215
201
|
return function (tr) {
|
|
216
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
202
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill());
|
|
217
203
|
};
|
|
218
204
|
}
|
|
219
205
|
return function (tr) {
|
|
220
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
206
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(undefined));
|
|
221
207
|
};
|
|
222
208
|
}
|
|
223
209
|
function removeLastColumnInLayout(column, columnPos, insideRightEdgePos) {
|
|
@@ -106,9 +106,8 @@ const LayoutBreakoutResizer = ({
|
|
|
106
106
|
dynamicFullWidthGuidelineOffset: layoutDynamicFullWidthGuidelineOffset
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
|
-
const toDOM =
|
|
110
|
-
class: 'layout-section-container'
|
|
111
|
-
'data-local-id': node.attrs.localId
|
|
109
|
+
const toDOM = () => ['div', {
|
|
110
|
+
class: 'layout-section-container'
|
|
112
111
|
}, ['div', {
|
|
113
112
|
'data-layout-section': true
|
|
114
113
|
}, 0]];
|
|
@@ -144,7 +143,7 @@ export class LayoutSectionView extends ReactNodeView {
|
|
|
144
143
|
const {
|
|
145
144
|
dom: container,
|
|
146
145
|
contentDOM
|
|
147
|
-
} = DOMSerializer.renderSpec(document, toDOM(
|
|
146
|
+
} = DOMSerializer.renderSpec(document, toDOM());
|
|
148
147
|
|
|
149
148
|
// Ignored via go/ees005
|
|
150
149
|
// eslint-disable-next-line @atlaskit/editor/no-as-casting
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { uuid } from '@atlaskit/adf-schema';
|
|
2
1
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, LAYOUT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
3
2
|
import { withAnalytics } from '@atlaskit/editor-common/editor-analytics';
|
|
4
3
|
import { flatmap, getStepRange, isEmptyDocument, mapChildren } from '@atlaskit/editor-common/utils';
|
|
@@ -133,35 +132,23 @@ export const createMultiColumnLayoutSection = (state, numberOfColumns = 2) => {
|
|
|
133
132
|
const columns = Fragment.fromArray(Array.from({
|
|
134
133
|
length: numberOfColumns
|
|
135
134
|
}, () => layoutColumn.createAndFill({
|
|
136
|
-
width: EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
137
|
-
localId: fg('platform_editor_adf_with_localid') ? uuid.generate() : undefined
|
|
135
|
+
width: EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
138
136
|
})));
|
|
139
|
-
|
|
140
|
-
localId: uuid.generate()
|
|
141
|
-
} : undefined;
|
|
142
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
137
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
143
138
|
};
|
|
144
139
|
export const createDefaultLayoutSection = state => {
|
|
145
140
|
const {
|
|
146
141
|
layoutSection,
|
|
147
142
|
layoutColumn
|
|
148
143
|
} = state.schema.nodes;
|
|
144
|
+
|
|
149
145
|
// create a 50-50 layout by default
|
|
150
146
|
const columns = Fragment.fromArray([layoutColumn.createAndFill({
|
|
151
|
-
width: 50
|
|
152
|
-
...(fg('platform_editor_adf_with_localid') ? {
|
|
153
|
-
localId: uuid.generate()
|
|
154
|
-
} : undefined)
|
|
147
|
+
width: 50
|
|
155
148
|
}), layoutColumn.createAndFill({
|
|
156
|
-
width: 50
|
|
157
|
-
...(fg('platform_editor_adf_with_localid') ? {
|
|
158
|
-
localId: uuid.generate()
|
|
159
|
-
} : undefined)
|
|
149
|
+
width: 50
|
|
160
150
|
})]);
|
|
161
|
-
|
|
162
|
-
localId: uuid.generate()
|
|
163
|
-
} : undefined;
|
|
164
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
151
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
165
152
|
};
|
|
166
153
|
export const insertLayoutColumns = (state, dispatch) => {
|
|
167
154
|
if (dispatch) {
|
|
@@ -189,16 +176,13 @@ export const insertLayoutColumnsWithAnalytics = editorAnalyticsAPI => inputMetho
|
|
|
189
176
|
* Add a column to the right of existing layout
|
|
190
177
|
*/
|
|
191
178
|
function addColumn(schema, pos) {
|
|
192
|
-
const attrs = fg('platform_editor_adf_with_localid') ? {
|
|
193
|
-
localId: uuid.generate()
|
|
194
|
-
} : undefined;
|
|
195
179
|
if (editorExperiment('advanced_layouts', false)) {
|
|
196
180
|
return tr => {
|
|
197
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
181
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill());
|
|
198
182
|
};
|
|
199
183
|
}
|
|
200
184
|
return tr => {
|
|
201
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
185
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(undefined));
|
|
202
186
|
};
|
|
203
187
|
}
|
|
204
188
|
function removeLastColumnInLayout(column, columnPos, insideRightEdgePos) {
|
|
@@ -110,10 +110,9 @@ var LayoutBreakoutResizer = function LayoutBreakoutResizer(_ref) {
|
|
|
110
110
|
dynamicFullWidthGuidelineOffset: layoutDynamicFullWidthGuidelineOffset
|
|
111
111
|
});
|
|
112
112
|
};
|
|
113
|
-
var toDOM = function toDOM(
|
|
113
|
+
var toDOM = function toDOM() {
|
|
114
114
|
return ['div', {
|
|
115
|
-
class: 'layout-section-container'
|
|
116
|
-
'data-local-id': node.attrs.localId
|
|
115
|
+
class: 'layout-section-container'
|
|
117
116
|
}, ['div', {
|
|
118
117
|
'data-layout-section': true
|
|
119
118
|
}, 0]];
|
|
@@ -153,7 +152,7 @@ export var LayoutSectionView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
153
152
|
return _createClass(LayoutSectionView, [{
|
|
154
153
|
key: "getContentDOM",
|
|
155
154
|
value: function getContentDOM() {
|
|
156
|
-
var _ref2 = DOMSerializer.renderSpec(document, toDOM(
|
|
155
|
+
var _ref2 = DOMSerializer.renderSpec(document, toDOM()),
|
|
157
156
|
container = _ref2.dom,
|
|
158
157
|
contentDOM = _ref2.contentDOM;
|
|
159
158
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
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; }
|
|
3
3
|
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) { _defineProperty(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; }
|
|
4
|
-
import { uuid } from '@atlaskit/adf-schema';
|
|
5
4
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, LAYOUT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
6
5
|
import { withAnalytics } from '@atlaskit/editor-common/editor-analytics';
|
|
7
6
|
import { flatmap, getStepRange, isEmptyDocument, mapChildren } from '@atlaskit/editor-common/utils';
|
|
@@ -141,33 +140,23 @@ export var createMultiColumnLayoutSection = function createMultiColumnLayoutSect
|
|
|
141
140
|
length: numberOfColumns
|
|
142
141
|
}, function () {
|
|
143
142
|
return layoutColumn.createAndFill({
|
|
144
|
-
width: EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
145
|
-
localId: fg('platform_editor_adf_with_localid') ? uuid.generate() : undefined
|
|
143
|
+
width: EVEN_DISTRIBUTED_COL_WIDTHS[numberOfColumns]
|
|
146
144
|
});
|
|
147
145
|
}));
|
|
148
|
-
|
|
149
|
-
localId: uuid.generate()
|
|
150
|
-
} : undefined;
|
|
151
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
146
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
152
147
|
};
|
|
153
148
|
export var createDefaultLayoutSection = function createDefaultLayoutSection(state) {
|
|
154
149
|
var _state$schema$nodes2 = state.schema.nodes,
|
|
155
150
|
layoutSection = _state$schema$nodes2.layoutSection,
|
|
156
151
|
layoutColumn = _state$schema$nodes2.layoutColumn;
|
|
152
|
+
|
|
157
153
|
// create a 50-50 layout by default
|
|
158
|
-
var columns = Fragment.fromArray([layoutColumn.createAndFill(
|
|
154
|
+
var columns = Fragment.fromArray([layoutColumn.createAndFill({
|
|
159
155
|
width: 50
|
|
160
|
-
},
|
|
161
|
-
localId: uuid.generate()
|
|
162
|
-
} : undefined)), layoutColumn.createAndFill(_objectSpread({
|
|
156
|
+
}), layoutColumn.createAndFill({
|
|
163
157
|
width: 50
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
} : undefined))]);
|
|
167
|
-
var attrs = fg('platform_editor_adf_with_localid') ? {
|
|
168
|
-
localId: uuid.generate()
|
|
169
|
-
} : undefined;
|
|
170
|
-
return layoutSection.createAndFill(attrs, columns);
|
|
158
|
+
})]);
|
|
159
|
+
return layoutSection.createAndFill(undefined, columns);
|
|
171
160
|
};
|
|
172
161
|
export var insertLayoutColumns = function insertLayoutColumns(state, dispatch) {
|
|
173
162
|
if (dispatch) {
|
|
@@ -199,16 +188,13 @@ export var insertLayoutColumnsWithAnalytics = function insertLayoutColumnsWithAn
|
|
|
199
188
|
* Add a column to the right of existing layout
|
|
200
189
|
*/
|
|
201
190
|
function addColumn(schema, pos) {
|
|
202
|
-
var attrs = fg('platform_editor_adf_with_localid') ? {
|
|
203
|
-
localId: uuid.generate()
|
|
204
|
-
} : undefined;
|
|
205
191
|
if (editorExperiment('advanced_layouts', false)) {
|
|
206
192
|
return function (tr) {
|
|
207
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
193
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill());
|
|
208
194
|
};
|
|
209
195
|
}
|
|
210
196
|
return function (tr) {
|
|
211
|
-
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(
|
|
197
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos), schema.nodes.layoutColumn.createAndFill(undefined));
|
|
212
198
|
};
|
|
213
199
|
}
|
|
214
200
|
function removeLastColumnInLayout(column, columnPos, insideRightEdgePos) {
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { jsx } from '@emotion/react';
|
|
6
6
|
import { type IconProps } from '@atlaskit/icon';
|
|
7
|
-
export declare const LayoutThreeWithLeftSidebarsIcon: (props: Omit<IconProps,
|
|
7
|
+
export declare const LayoutThreeWithLeftSidebarsIcon: (props: Omit<IconProps, "glyph">) => jsx.JSX.Element;
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { jsx } from '@emotion/react';
|
|
6
6
|
import { type IconProps } from '@atlaskit/icon';
|
|
7
|
-
export declare const LayoutThreeWithRightSidebarsIcon: (props: Omit<IconProps,
|
|
7
|
+
export declare const LayoutThreeWithRightSidebarsIcon: (props: Omit<IconProps, "glyph">) => jsx.JSX.Element;
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { jsx } from '@emotion/react';
|
|
6
6
|
import { type IconProps } from '@atlaskit/icon';
|
|
7
|
-
export declare const LayoutThreeWithLeftSidebarsIcon: (props: Omit<IconProps,
|
|
7
|
+
export declare const LayoutThreeWithLeftSidebarsIcon: (props: Omit<IconProps, "glyph">) => jsx.JSX.Element;
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { jsx } from '@emotion/react';
|
|
6
6
|
import { type IconProps } from '@atlaskit/icon';
|
|
7
|
-
export declare const LayoutThreeWithRightSidebarsIcon: (props: Omit<IconProps,
|
|
7
|
+
export declare const LayoutThreeWithRightSidebarsIcon: (props: Omit<IconProps, "glyph">) => jsx.JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-layout",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.6",
|
|
4
4
|
"description": "Layout plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,23 +41,20 @@
|
|
|
41
41
|
"@atlaskit/editor-plugin-selection": "^3.0.0",
|
|
42
42
|
"@atlaskit/editor-plugin-width": "^4.0.0",
|
|
43
43
|
"@atlaskit/editor-prosemirror": "7.0.0",
|
|
44
|
-
"@atlaskit/editor-shared-styles": "^3.
|
|
45
|
-
"@atlaskit/icon": "^27.
|
|
46
|
-
"@atlaskit/icon-lab": "^5.
|
|
44
|
+
"@atlaskit/editor-shared-styles": "^3.6.0",
|
|
45
|
+
"@atlaskit/icon": "^27.12.0",
|
|
46
|
+
"@atlaskit/icon-lab": "^5.6.0",
|
|
47
47
|
"@atlaskit/platform-feature-flags": "^1.1.0",
|
|
48
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
48
|
+
"@atlaskit/tmp-editor-statsig": "^10.0.0",
|
|
49
49
|
"@atlaskit/tokens": "^6.0.0",
|
|
50
50
|
"@babel/runtime": "^7.0.0",
|
|
51
51
|
"@emotion/react": "^11.7.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@atlaskit/editor-common": "^107.
|
|
54
|
+
"@atlaskit/editor-common": "^107.25.0",
|
|
55
55
|
"react": "^18.2.0",
|
|
56
56
|
"react-intl-next": "npm:react-intl@^5.18.1"
|
|
57
57
|
},
|
|
58
|
-
"devDependencies": {
|
|
59
|
-
"typescript": "~5.4.2"
|
|
60
|
-
},
|
|
61
58
|
"techstack": {
|
|
62
59
|
"@atlassian/frontend": {
|
|
63
60
|
"code-structure": [
|