@principal-ade/code-quality-panels 0.1.14 → 0.1.15
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/dist/panels.bundle.js +197 -77
- package/dist/panels.bundle.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/QualityEmptyState.d.ts +0 -22
- package/dist/components/QualityEmptyState.d.ts.map +0 -1
- package/dist/components/QualityHexagon.d.ts +0 -52
- package/dist/components/QualityHexagon.d.ts.map +0 -1
- package/dist/components/QualityHexagon.stories.d.ts +0 -54
- package/dist/components/QualityHexagon.stories.d.ts.map +0 -1
- package/dist/components/RepositoryQualityGrid.d.ts +0 -84
- package/dist/components/RepositoryQualityGrid.d.ts.map +0 -1
- package/dist/components/RepositoryQualityGrid.stories.d.ts +0 -45
- package/dist/components/RepositoryQualityGrid.stories.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -4
- package/dist/components/index.d.ts.map +0 -1
- package/dist/index.d.ts +0 -18
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/utils.d.ts +0 -3
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/mocks/panelContext.d.ts +0 -33
- package/dist/mocks/panelContext.d.ts.map +0 -1
- package/dist/panels/QualityHexagonPanel.d.ts +0 -7
- package/dist/panels/QualityHexagonPanel.d.ts.map +0 -1
- package/dist/panels/QualityHexagonPanel.stories.d.ts +0 -64
- package/dist/panels/QualityHexagonPanel.stories.d.ts.map +0 -1
- package/dist/panels/RepositoryQualityGridPanel.d.ts +0 -8
- package/dist/panels/RepositoryQualityGridPanel.d.ts.map +0 -1
- package/dist/panels/RepositoryQualityGridPanel.stories.d.ts +0 -26
- package/dist/panels/RepositoryQualityGridPanel.stories.d.ts.map +0 -1
- package/dist/tools/index.d.ts +0 -7
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools.bundle.js +0 -7
- package/dist/types/index.d.ts +0 -7
- package/dist/types/index.d.ts.map +0 -1
package/dist/panels.bundle.js
CHANGED
|
@@ -106,47 +106,121 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
106
106
|
* This source code is licensed under the ISC license.
|
|
107
107
|
* See the LICENSE file in the root directory of this source tree.
|
|
108
108
|
*/
|
|
109
|
-
const __iconNode$
|
|
110
|
-
|
|
109
|
+
const __iconNode$d = [
|
|
110
|
+
["path", { d: "M12 7v14", key: "1akyts" }],
|
|
111
|
+
[
|
|
112
|
+
"path",
|
|
113
|
+
{
|
|
114
|
+
d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",
|
|
115
|
+
key: "ruj8y"
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
];
|
|
119
|
+
const BookOpen = createLucideIcon("book-open", __iconNode$d);
|
|
111
120
|
/**
|
|
112
121
|
* @license lucide-react v0.552.0 - ISC
|
|
113
122
|
*
|
|
114
123
|
* This source code is licensed under the ISC license.
|
|
115
124
|
* See the LICENSE file in the root directory of this source tree.
|
|
116
125
|
*/
|
|
117
|
-
const __iconNode$
|
|
118
|
-
|
|
126
|
+
const __iconNode$c = [
|
|
127
|
+
[
|
|
128
|
+
"path",
|
|
129
|
+
{ d: "M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1", key: "ezmyqa" }
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
"path",
|
|
133
|
+
{
|
|
134
|
+
d: "M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1",
|
|
135
|
+
key: "e1hn23"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
];
|
|
139
|
+
const Braces = createLucideIcon("braces", __iconNode$c);
|
|
119
140
|
/**
|
|
120
141
|
* @license lucide-react v0.552.0 - ISC
|
|
121
142
|
*
|
|
122
143
|
* This source code is licensed under the ISC license.
|
|
123
144
|
* See the LICENSE file in the root directory of this source tree.
|
|
124
145
|
*/
|
|
125
|
-
const __iconNode$
|
|
146
|
+
const __iconNode$b = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
147
|
+
const Check = createLucideIcon("check", __iconNode$b);
|
|
148
|
+
/**
|
|
149
|
+
* @license lucide-react v0.552.0 - ISC
|
|
150
|
+
*
|
|
151
|
+
* This source code is licensed under the ISC license.
|
|
152
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
153
|
+
*/
|
|
154
|
+
const __iconNode$a = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
155
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$a);
|
|
156
|
+
/**
|
|
157
|
+
* @license lucide-react v0.552.0 - ISC
|
|
158
|
+
*
|
|
159
|
+
* This source code is licensed under the ISC license.
|
|
160
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
161
|
+
*/
|
|
162
|
+
const __iconNode$9 = [
|
|
126
163
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
127
164
|
["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
|
|
128
165
|
];
|
|
129
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
166
|
+
const Copy = createLucideIcon("copy", __iconNode$9);
|
|
130
167
|
/**
|
|
131
168
|
* @license lucide-react v0.552.0 - ISC
|
|
132
169
|
*
|
|
133
170
|
* This source code is licensed under the ISC license.
|
|
134
171
|
* See the LICENSE file in the root directory of this source tree.
|
|
135
172
|
*/
|
|
136
|
-
const __iconNode$
|
|
173
|
+
const __iconNode$8 = [
|
|
174
|
+
[
|
|
175
|
+
"path",
|
|
176
|
+
{
|
|
177
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
178
|
+
key: "1oefj6"
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }],
|
|
182
|
+
["circle", { cx: "11.5", cy: "14.5", r: "2.5", key: "1bq0ko" }],
|
|
183
|
+
["path", { d: "M13.3 16.3 15 18", key: "2quom7" }]
|
|
184
|
+
];
|
|
185
|
+
const FileSearch = createLucideIcon("file-search", __iconNode$8);
|
|
186
|
+
/**
|
|
187
|
+
* @license lucide-react v0.552.0 - ISC
|
|
188
|
+
*
|
|
189
|
+
* This source code is licensed under the ISC license.
|
|
190
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
191
|
+
*/
|
|
192
|
+
const __iconNode$7 = [
|
|
193
|
+
[
|
|
194
|
+
"path",
|
|
195
|
+
{
|
|
196
|
+
d: "M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",
|
|
197
|
+
key: "18mbvz"
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
["path", { d: "M6.453 15h11.094", key: "3shlmq" }],
|
|
201
|
+
["path", { d: "M8.5 2h7", key: "csnxdl" }]
|
|
202
|
+
];
|
|
203
|
+
const FlaskConical = createLucideIcon("flask-conical", __iconNode$7);
|
|
204
|
+
/**
|
|
205
|
+
* @license lucide-react v0.552.0 - ISC
|
|
206
|
+
*
|
|
207
|
+
* This source code is licensed under the ISC license.
|
|
208
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
209
|
+
*/
|
|
210
|
+
const __iconNode$6 = [
|
|
137
211
|
["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
|
|
138
212
|
["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
|
|
139
213
|
["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
|
|
140
214
|
["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
|
|
141
215
|
];
|
|
142
|
-
const GitBranch = createLucideIcon("git-branch", __iconNode$
|
|
216
|
+
const GitBranch = createLucideIcon("git-branch", __iconNode$6);
|
|
143
217
|
/**
|
|
144
218
|
* @license lucide-react v0.552.0 - ISC
|
|
145
219
|
*
|
|
146
220
|
* This source code is licensed under the ISC license.
|
|
147
221
|
* See the LICENSE file in the root directory of this source tree.
|
|
148
222
|
*/
|
|
149
|
-
const __iconNode$
|
|
223
|
+
const __iconNode$5 = [
|
|
150
224
|
[
|
|
151
225
|
"path",
|
|
152
226
|
{
|
|
@@ -155,30 +229,63 @@ const __iconNode$3 = [
|
|
|
155
229
|
}
|
|
156
230
|
]
|
|
157
231
|
];
|
|
158
|
-
const Hexagon = createLucideIcon("hexagon", __iconNode$
|
|
232
|
+
const Hexagon = createLucideIcon("hexagon", __iconNode$5);
|
|
159
233
|
/**
|
|
160
234
|
* @license lucide-react v0.552.0 - ISC
|
|
161
235
|
*
|
|
162
236
|
* This source code is licensed under the ISC license.
|
|
163
237
|
* See the LICENSE file in the root directory of this source tree.
|
|
164
238
|
*/
|
|
165
|
-
const __iconNode$
|
|
239
|
+
const __iconNode$4 = [
|
|
166
240
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
167
241
|
["path", { d: "M12 16v-4", key: "1dtifu" }],
|
|
168
242
|
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
169
243
|
];
|
|
170
|
-
const Info = createLucideIcon("info", __iconNode$
|
|
244
|
+
const Info = createLucideIcon("info", __iconNode$4);
|
|
171
245
|
/**
|
|
172
246
|
* @license lucide-react v0.552.0 - ISC
|
|
173
247
|
*
|
|
174
248
|
* This source code is licensed under the ISC license.
|
|
175
249
|
* See the LICENSE file in the root directory of this source tree.
|
|
176
250
|
*/
|
|
177
|
-
const __iconNode$
|
|
251
|
+
const __iconNode$3 = [
|
|
252
|
+
[
|
|
253
|
+
"path",
|
|
254
|
+
{
|
|
255
|
+
d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",
|
|
256
|
+
key: "1s2grr"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
["path", { d: "M20 2v4", key: "1rf3ol" }],
|
|
260
|
+
["path", { d: "M22 4h-4", key: "gwowj6" }],
|
|
261
|
+
["circle", { cx: "4", cy: "20", r: "2", key: "6kqj1y" }]
|
|
262
|
+
];
|
|
263
|
+
const Sparkles = createLucideIcon("sparkles", __iconNode$3);
|
|
264
|
+
/**
|
|
265
|
+
* @license lucide-react v0.552.0 - ISC
|
|
266
|
+
*
|
|
267
|
+
* This source code is licensed under the ISC license.
|
|
268
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
269
|
+
*/
|
|
270
|
+
const __iconNode$2 = [
|
|
178
271
|
["path", { d: "M12 19h8", key: "baeox8" }],
|
|
179
272
|
["path", { d: "m4 17 6-6-6-6", key: "1yngyt" }]
|
|
180
273
|
];
|
|
181
|
-
const Terminal = createLucideIcon("terminal", __iconNode$
|
|
274
|
+
const Terminal = createLucideIcon("terminal", __iconNode$2);
|
|
275
|
+
/**
|
|
276
|
+
* @license lucide-react v0.552.0 - ISC
|
|
277
|
+
*
|
|
278
|
+
* This source code is licensed under the ISC license.
|
|
279
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
280
|
+
*/
|
|
281
|
+
const __iconNode$1 = [
|
|
282
|
+
["path", { d: "M10 11v6", key: "nco0om" }],
|
|
283
|
+
["path", { d: "M14 11v6", key: "outv1u" }],
|
|
284
|
+
["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
|
|
285
|
+
["path", { d: "M3 6h18", key: "d0wm0j" }],
|
|
286
|
+
["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
|
|
287
|
+
];
|
|
288
|
+
const Trash2 = createLucideIcon("trash-2", __iconNode$1);
|
|
182
289
|
/**
|
|
183
290
|
* @license lucide-react v0.552.0 - ISC
|
|
184
291
|
*
|
|
@@ -957,12 +1064,12 @@ const CommandLine = ({ command, theme, label }) => {
|
|
|
957
1064
|
};
|
|
958
1065
|
const MetricsPreview = ({ theme }) => {
|
|
959
1066
|
const metrics = [
|
|
960
|
-
{ key: "tests", label: "Tests", description: "Test coverage & pass rate",
|
|
961
|
-
{ key: "linting", label: "Linting", description: "ESLint code quality",
|
|
962
|
-
{ key: "types", label: "Types", description: "TypeScript type safety",
|
|
963
|
-
{ key: "formatting", label: "Formatting", description: "Prettier code style",
|
|
964
|
-
{ key: "deadCode", label: "Dead Code", description: "Unused exports & deps",
|
|
965
|
-
{ key: "documentation", label: "Docs", description: "Code documentation",
|
|
1067
|
+
{ key: "tests", label: "Tests", description: "Test coverage & pass rate", Icon: FlaskConical },
|
|
1068
|
+
{ key: "linting", label: "Linting", description: "ESLint code quality", Icon: FileSearch },
|
|
1069
|
+
{ key: "types", label: "Types", description: "TypeScript type safety", Icon: Braces },
|
|
1070
|
+
{ key: "formatting", label: "Formatting", description: "Prettier code style", Icon: Sparkles },
|
|
1071
|
+
{ key: "deadCode", label: "Dead Code", description: "Unused exports & deps", Icon: Trash2 },
|
|
1072
|
+
{ key: "documentation", label: "Docs", description: "Code documentation", Icon: BookOpen }
|
|
966
1073
|
];
|
|
967
1074
|
return /* @__PURE__ */ jsx(
|
|
968
1075
|
"div",
|
|
@@ -988,7 +1095,7 @@ const MetricsPreview = ({ theme }) => {
|
|
|
988
1095
|
fontSize: 12
|
|
989
1096
|
},
|
|
990
1097
|
children: [
|
|
991
|
-
/* @__PURE__ */ jsx(
|
|
1098
|
+
/* @__PURE__ */ jsx(m.Icon, { size: 14, color: theme.colors.textMuted }),
|
|
992
1099
|
/* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
|
|
993
1100
|
/* @__PURE__ */ jsx("span", { style: { fontWeight: 500, color: theme.colors.text }, children: m.label }),
|
|
994
1101
|
/* @__PURE__ */ jsx("span", { style: { fontSize: 11, color: theme.colors.textMuted }, children: m.description })
|
|
@@ -1392,7 +1499,7 @@ const QualityHexagonPanelContent = ({
|
|
|
1392
1499
|
documentation: acc.documentation + pkg.metrics.documentation / packages.length
|
|
1393
1500
|
}), { tests: 0, deadCode: 0, linting: 0, formatting: 0, types: 0, documentation: 0 })
|
|
1394
1501
|
) : "none";
|
|
1395
|
-
return /* @__PURE__ */
|
|
1502
|
+
return /* @__PURE__ */ jsxs(
|
|
1396
1503
|
"div",
|
|
1397
1504
|
{
|
|
1398
1505
|
style: {
|
|
@@ -1402,60 +1509,73 @@ const QualityHexagonPanelContent = ({
|
|
|
1402
1509
|
backgroundColor: theme.colors.background,
|
|
1403
1510
|
color: theme.colors.text,
|
|
1404
1511
|
overflowY: "auto",
|
|
1405
|
-
boxSizing: "border-box"
|
|
1512
|
+
boxSizing: "border-box",
|
|
1513
|
+
display: "flex",
|
|
1514
|
+
flexDirection: "column"
|
|
1406
1515
|
},
|
|
1407
|
-
children:
|
|
1408
|
-
"div",
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
}
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
fontSize: 20,
|
|
1425
|
-
fontWeight: 600,
|
|
1426
|
-
color: theme.colors.text
|
|
1427
|
-
},
|
|
1428
|
-
children: "Code Quality"
|
|
1429
|
-
}
|
|
1430
|
-
),
|
|
1431
|
-
/* @__PURE__ */ jsx(
|
|
1432
|
-
"span",
|
|
1433
|
-
{
|
|
1434
|
-
title: "Platinum: 90%+ avg | Gold: 75%+ | Silver: 60%+ | Bronze: 40%+",
|
|
1435
|
-
style: {
|
|
1436
|
-
display: "inline-flex",
|
|
1437
|
-
alignItems: "center",
|
|
1438
|
-
justifyContent: "center",
|
|
1439
|
-
width: 18,
|
|
1440
|
-
height: 18,
|
|
1441
|
-
borderRadius: "50%",
|
|
1442
|
-
border: `1px solid ${theme.colors.border}`,
|
|
1443
|
-
fontSize: 12,
|
|
1444
|
-
color: theme.colors.textMuted,
|
|
1445
|
-
cursor: "help"
|
|
1446
|
-
},
|
|
1447
|
-
children: "?"
|
|
1448
|
-
}
|
|
1449
|
-
),
|
|
1450
|
-
packages.length > 1 && /* @__PURE__ */ jsxs("span", { style: {
|
|
1516
|
+
children: [
|
|
1517
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
1518
|
+
display: "flex",
|
|
1519
|
+
alignItems: "center",
|
|
1520
|
+
gap: 12,
|
|
1521
|
+
height: 40,
|
|
1522
|
+
flexShrink: 0,
|
|
1523
|
+
padding: "0 16px",
|
|
1524
|
+
borderBottom: `1px solid ${theme.colors.border}`,
|
|
1525
|
+
boxSizing: "border-box"
|
|
1526
|
+
}, children: [
|
|
1527
|
+
/* @__PURE__ */ jsx(Hexagon, { size: 20, color: tierColors[overallTier] }),
|
|
1528
|
+
/* @__PURE__ */ jsx(
|
|
1529
|
+
"h2",
|
|
1530
|
+
{
|
|
1531
|
+
style: {
|
|
1532
|
+
margin: 0,
|
|
1451
1533
|
fontSize: 14,
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1534
|
+
fontWeight: 600,
|
|
1535
|
+
color: theme.colors.text
|
|
1536
|
+
},
|
|
1537
|
+
children: "Code Quality"
|
|
1538
|
+
}
|
|
1539
|
+
),
|
|
1540
|
+
/* @__PURE__ */ jsx(
|
|
1541
|
+
"span",
|
|
1542
|
+
{
|
|
1543
|
+
title: "Platinum: 90%+ avg | Gold: 75%+ | Silver: 60%+ | Bronze: 40%+",
|
|
1544
|
+
style: {
|
|
1545
|
+
display: "inline-flex",
|
|
1546
|
+
alignItems: "center",
|
|
1547
|
+
justifyContent: "center",
|
|
1548
|
+
width: 16,
|
|
1549
|
+
height: 16,
|
|
1550
|
+
borderRadius: "50%",
|
|
1551
|
+
border: `1px solid ${theme.colors.border}`,
|
|
1552
|
+
fontSize: 11,
|
|
1553
|
+
color: theme.colors.textMuted,
|
|
1554
|
+
cursor: "help"
|
|
1555
|
+
},
|
|
1556
|
+
children: "?"
|
|
1557
|
+
}
|
|
1558
|
+
),
|
|
1559
|
+
packages.length > 1 && /* @__PURE__ */ jsxs("span", { style: {
|
|
1560
|
+
fontSize: 13,
|
|
1561
|
+
color: theme.colors.textMuted
|
|
1562
|
+
}, children: [
|
|
1563
|
+
packages.length,
|
|
1564
|
+
" packages"
|
|
1565
|
+
] })
|
|
1566
|
+
] }),
|
|
1567
|
+
/* @__PURE__ */ jsx(
|
|
1568
|
+
"div",
|
|
1569
|
+
{
|
|
1570
|
+
style: {
|
|
1571
|
+
padding: 16,
|
|
1572
|
+
display: "flex",
|
|
1573
|
+
flexDirection: "column",
|
|
1574
|
+
gap: 16,
|
|
1575
|
+
flex: 1,
|
|
1576
|
+
minHeight: 0
|
|
1577
|
+
},
|
|
1578
|
+
children: /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 16, minHeight: 0 }, children: isLoading ? /* @__PURE__ */ jsx("div", { style: {
|
|
1459
1579
|
padding: 40,
|
|
1460
1580
|
textAlign: "center",
|
|
1461
1581
|
color: theme.colors.textMuted
|
|
@@ -1503,9 +1623,9 @@ const QualityHexagonPanelContent = ({
|
|
|
1503
1623
|
pkg.name
|
|
1504
1624
|
);
|
|
1505
1625
|
}) })
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1626
|
+
}
|
|
1627
|
+
)
|
|
1628
|
+
]
|
|
1509
1629
|
}
|
|
1510
1630
|
);
|
|
1511
1631
|
};
|