datastake-daf 0.6.280 → 0.6.281

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.
@@ -0,0 +1,243 @@
1
+ import { storyConfig as EventConfig } from "./storyConfig1.js";
2
+ // Create default configs since the other files were deleted
3
+ const DefaultGlobeConfig = {
4
+ data: [
5
+ {
6
+ gps: { latitude: 40.7128, longitude: -74.0060 },
7
+ name: "New York City",
8
+ description: "Major metropolitan area in the United States",
9
+ total: 15,
10
+ sources: 3,
11
+ },
12
+ {
13
+ gps: { latitude: 51.5074, longitude: -0.1278 },
14
+ name: "London",
15
+ description: "Capital of the United Kingdom",
16
+ total: 12,
17
+ sources: 2,
18
+ },
19
+ {
20
+ gps: { latitude: 35.6762, longitude: 139.6503 },
21
+ name: "Tokyo",
22
+ description: "Capital of Japan",
23
+ total: 8,
24
+ sources: 1,
25
+ },
26
+ {
27
+ gps: { latitude: -33.8688, longitude: 151.2093 },
28
+ name: "Sydney",
29
+ description: "Major city in Australia",
30
+ total: 6,
31
+ sources: 2,
32
+ },
33
+ {
34
+ gps: { latitude: -22.9068, longitude: -43.1729 },
35
+ name: "Rio de Janeiro",
36
+ description: "Major city in Brazil",
37
+ total: 10,
38
+ sources: 1,
39
+ },
40
+ ],
41
+ renderTooltip: (data) => [
42
+ { label: "City", value: data.name || "-" },
43
+ { label: "Total Events", value: data.total || 0 },
44
+ { label: "Sources", value: data.sources || 0 },
45
+ { label: "Description", value: data.description || "-" },
46
+ ],
47
+ primaryLink: true,
48
+ showSider: false,
49
+ };
50
+
51
+ const TerritoryGlobeConfig = {
52
+ data: [
53
+ {
54
+ gps: { latitude: 39.9042, longitude: 116.4074 },
55
+ name: "Beijing Territory",
56
+ description: "Administrative region in China",
57
+ total: 25,
58
+ sources: 4,
59
+ },
60
+ {
61
+ gps: { latitude: 55.7558, longitude: 37.6176 },
62
+ name: "Moscow Region",
63
+ description: "Federal subject of Russia",
64
+ total: 18,
65
+ sources: 3,
66
+ },
67
+ {
68
+ gps: { latitude: -26.2041, longitude: 28.0473 },
69
+ name: "Gauteng Province",
70
+ description: "Province in South Africa",
71
+ total: 14,
72
+ sources: 2,
73
+ },
74
+ {
75
+ gps: { latitude: 19.4326, longitude: -99.1332 },
76
+ name: "Mexico City Territory",
77
+ description: "Federal district in Mexico",
78
+ total: 20,
79
+ sources: 3,
80
+ },
81
+ ],
82
+ renderTooltip: (data) => [
83
+ { label: "Territory", value: data.name || "-" },
84
+ { label: "Total Events", value: data.total || 0 },
85
+ { label: "Sources", value: data.sources || 0 },
86
+ { label: "Description", value: data.description || "-" },
87
+ ],
88
+ primaryLink: true,
89
+ showSider: false,
90
+ };
91
+
92
+ const StakeholderGlobeConfig = {
93
+ data: [
94
+ {
95
+ gps: { latitude: 48.8566, longitude: 2.3522 },
96
+ name: "Paris NGO",
97
+ description: "Environmental NGO in France",
98
+ total: 12,
99
+ sources: 2,
100
+ },
101
+ {
102
+ gps: { latitude: 37.7749, longitude: -122.4194 },
103
+ name: "San Francisco Tech",
104
+ description: "Technology company in California",
105
+ total: 8,
106
+ sources: 1,
107
+ },
108
+ {
109
+ gps: { latitude: 1.3521, longitude: 103.8198 },
110
+ name: "Singapore Corp",
111
+ description: "Multinational corporation",
112
+ total: 15,
113
+ sources: 3,
114
+ },
115
+ {
116
+ gps: { latitude: 52.5200, longitude: 13.4050 },
117
+ name: "Berlin Institute",
118
+ description: "Research institute in Germany",
119
+ total: 9,
120
+ sources: 2,
121
+ },
122
+ {
123
+ gps: { latitude: -34.6037, longitude: -58.3816 },
124
+ name: "Buenos Aires Union",
125
+ description: "Labor union in Argentina",
126
+ total: 11,
127
+ sources: 1,
128
+ },
129
+ ],
130
+ renderTooltip: (data) => [
131
+ { label: "Stakeholder", value: data.name || "-" },
132
+ { label: "Total Events", value: data.total || 0 },
133
+ { label: "Sources", value: data.sources || 0 },
134
+ { label: "Description", value: data.description || "-" },
135
+ ],
136
+ primaryLink: true,
137
+ showSider: false,
138
+ };
139
+
140
+ const ChainGlobeConfig = {
141
+ data: [
142
+ {
143
+ gps: { latitude: 23.1291, longitude: 113.2644 },
144
+ name: "Guangzhou Manufacturing",
145
+ description: "Electronics manufacturing hub in China",
146
+ total: 22,
147
+ sources: 4,
148
+ },
149
+ {
150
+ gps: { latitude: 12.9716, longitude: 77.5946 },
151
+ name: "Bangalore Tech Hub",
152
+ description: "Software development center in India",
153
+ total: 18,
154
+ sources: 3,
155
+ },
156
+ {
157
+ gps: { latitude: 41.8781, longitude: -87.6298 },
158
+ name: "Chicago Logistics",
159
+ description: "Transportation and logistics hub in USA",
160
+ total: 16,
161
+ sources: 2,
162
+ },
163
+ {
164
+ gps: { latitude: 25.2048, longitude: 55.2708 },
165
+ name: "Dubai Trade Center",
166
+ description: "International trade and commerce hub",
167
+ total: 14,
168
+ sources: 3,
169
+ },
170
+ {
171
+ gps: { latitude: -23.5505, longitude: -46.6333 },
172
+ name: "São Paulo Distribution",
173
+ description: "Distribution center in Brazil",
174
+ total: 12,
175
+ sources: 2,
176
+ },
177
+ ],
178
+ renderTooltip: (data) => [
179
+ { label: "Supply Chain Node", value: data.name || "-" },
180
+ { label: "Total Events", value: data.total || 0 },
181
+ { label: "Sources", value: data.sources || 0 },
182
+ { label: "Description", value: data.description || "-" },
183
+ ],
184
+ primaryLink: true,
185
+ showSider: false,
186
+ };
187
+
188
+ const ProjectGlobeConfig = {
189
+ data: [
190
+ {
191
+ gps: { latitude: 6.5244, longitude: 3.3792 },
192
+ name: "Lagos Solar Project",
193
+ description: "Renewable energy project in Nigeria",
194
+ total: 8,
195
+ sources: 2,
196
+ },
197
+ {
198
+ gps: { latitude: -1.2921, longitude: 36.8219 },
199
+ name: "Nairobi Water Initiative",
200
+ description: "Water management project in Kenya",
201
+ total: 12,
202
+ sources: 3,
203
+ },
204
+ {
205
+ gps: { latitude: 13.7563, longitude: 100.5018 },
206
+ name: "Bangkok Green City",
207
+ description: "Urban sustainability project in Thailand",
208
+ total: 15,
209
+ sources: 4,
210
+ },
211
+ {
212
+ gps: { latitude: -12.0464, longitude: -77.0428 },
213
+ name: "Lima Education Hub",
214
+ description: "Educational development project in Peru",
215
+ total: 10,
216
+ sources: 2,
217
+ },
218
+ {
219
+ gps: { latitude: 30.0444, longitude: 31.2357 },
220
+ name: "Cairo Infrastructure",
221
+ description: "Infrastructure development project in Egypt",
222
+ total: 14,
223
+ sources: 3,
224
+ },
225
+ {
226
+ gps: { latitude: 55.7558, longitude: 37.6176 },
227
+ name: "Moscow Innovation Center",
228
+ description: "Technology innovation project in Russia",
229
+ total: 9,
230
+ sources: 2,
231
+ },
232
+ ],
233
+ renderTooltip: (data) => [
234
+ { label: "Project Name", value: data.name || "-" },
235
+ { label: "Total Events", value: data.total || 0 },
236
+ { label: "Sources", value: data.sources || 0 },
237
+ { label: "Description", value: data.description || "-" },
238
+ ],
239
+ primaryLink: true,
240
+ showSider: false,
241
+ };
242
+
243
+ export { DefaultGlobeConfig, TerritoryGlobeConfig, StakeholderGlobeConfig, EventConfig, ChainGlobeConfig, ProjectGlobeConfig };
@@ -0,0 +1,354 @@
1
+ import CustomIcon from "../../Icon/CustomIcon";
2
+ import DAFTable from "../../Table";
3
+ import MoreTags from "../../Table/MoreTags";
4
+
5
+ const isMineSite = true;
6
+
7
+ export const storyConfig = {
8
+ data: [
9
+ {
10
+ gps: {
11
+ latitude: -1.5457261,
12
+ longitude: 28.8756306,
13
+ },
14
+ name: "Rubaya Mining Site",
15
+ datastakeId: "LOC-00000000241",
16
+ description: "A major mining site with multiple operational areas and significant mineral extraction activities. This location has experienced various incidents and events over time.",
17
+ data: [
18
+ {
19
+ _id: "68af116e2cb57a4e3dd2e056",
20
+ createdBy: "4274fdb4-2798-46ea-a0a6-b4af5d92566e",
21
+ form: "event",
22
+ id: "91c3176a-d312-4259-9ddf-9d286ff6df87",
23
+ datastakeId: "EV-000000000150",
24
+ name: "Mining Collapse Incident",
25
+ authorId: "7e17f076-09e7-4668-927c-11c12ccd1346",
26
+ collectId: "d78271301d04f76dfe0f70ce3c9e114ffe4dc4e0",
27
+ country: "CD",
28
+ date: "2025-08-25",
29
+ typeOfEvent: "incident",
30
+ implementers: [],
31
+ associatedSubjects: [],
32
+ testimonialsSource: [],
33
+ pictures: [],
34
+ documents: [],
35
+ channels: ["NAS-00000000105"],
36
+ published: true,
37
+ version: 1,
38
+ identifiedPerpetrators: [],
39
+ identifiedVictims: [],
40
+ assistedVictims: [],
41
+ mitigationMeasures: [],
42
+ createdAt: "2025-08-27T00:00:00.000Z",
43
+ updatedAt: "2025-08-27T14:12:21.395Z",
44
+ __v: 0,
45
+ percentageCompletion: 40,
46
+ eventCategory: "conflict",
47
+ incindentType: null,
48
+ initiative: null,
49
+ meta: null,
50
+ namespace: "incident",
51
+ primarySource: null,
52
+ severity: "moderate",
53
+ sources: ["7e17f076-09e7-4668-927c-11c12ccd1346"],
54
+ type: "minor_incident",
55
+ description: "A minor mining collapse incident that occurred during routine operations. No injuries were reported, but equipment was damaged.",
56
+ },
57
+ {
58
+ _id: "68af1fb6b52f86d82f57e945",
59
+ createdBy: "b1e3f288-01a2-4cea-95d2-03f65dfede99",
60
+ form: "event",
61
+ id: "5bee0d0f-39da-4bd1-85a4-e66276c82303",
62
+ datastakeId: "EV-000000000153",
63
+ name: "Security Equipment Request",
64
+ authorId: "fc4ca5c6-f46d-424f-a948-d66b031a82c3",
65
+ collectId: "2142bd9f3306c9ec3c823f63bbbbb8fe3ebad7fa",
66
+ country: "CD",
67
+ date: "2025-08-11",
68
+ typeOfEvent: "testimonials",
69
+ implementers: [],
70
+ typeOfTestimonials: "request",
71
+ associatedSubjects: [],
72
+ testimonialsSource: [],
73
+ pictures: [],
74
+ documents: [],
75
+ channels: [],
76
+ published: true,
77
+ version: 1,
78
+ identifiedPerpetrators: [],
79
+ identifiedVictims: [],
80
+ assistedVictims: [],
81
+ mitigationMeasures: [],
82
+ createdAt: "2025-08-27T00:00:00.000Z",
83
+ updatedAt: "2025-08-27T15:10:00.619Z",
84
+ __v: 0,
85
+ percentageCompletion: 50,
86
+ meta: null,
87
+ namespace: "testimonials",
88
+ sources: ["fc4ca5c6-f46d-424f-a948-d66b031a82c3"],
89
+ type: "correctiveActions",
90
+ description: "A request for additional security equipment to improve safety measures at the mining site.",
91
+ },
92
+ {
93
+ _id: "68af5d45b52f86d82f580fc8",
94
+ createdBy: "fc4ca5c6-f46d-424f-a948-d66b031a82c3",
95
+ form: "event",
96
+ id: "97348b4c-f7cf-4124-9b70-0f6891a40a15",
97
+ datastakeId: "EV-000000000161",
98
+ name: "Major Safety Incident",
99
+ authorId: "fc4ca5c6-f46d-424f-a948-d66b031a82c3",
100
+ collectId: "33b9aea707761a7a735aee81ebd29d5656f049fa",
101
+ country: "CD",
102
+ date: "2025-08-11",
103
+ typeOfEvent: "incident",
104
+ implementers: [],
105
+ associatedSubjects: [],
106
+ testimonialsSource: [],
107
+ pictures: [],
108
+ documents: [],
109
+ channels: [],
110
+ published: false,
111
+ version: 1,
112
+ identifiedPerpetrators: [],
113
+ identifiedVictims: [],
114
+ assistedVictims: [],
115
+ mitigationMeasures: [],
116
+ createdAt: "2025-08-27T00:00:00.000Z",
117
+ updatedAt: "2025-08-27T00:00:00.000Z",
118
+ __v: 0,
119
+ percentageCompletion: 40,
120
+ eventCategory: null,
121
+ initiative: null,
122
+ meta: null,
123
+ namespace: "incident",
124
+ primarySource: null,
125
+ severity: "major",
126
+ sources: ["fc4ca5c6-f46d-424f-a948-d66b031a82c3"],
127
+ type: "major_incident",
128
+ description: "A major safety incident that required immediate attention and investigation. This event is currently under review.",
129
+ },
130
+ ],
131
+ type: "Mine site",
132
+ total: 5,
133
+ sources: 2,
134
+ },
135
+ {
136
+ gps: {
137
+ latitude: -2.3456789,
138
+ longitude: 29.1234567,
139
+ },
140
+ name: "Kivu Processing Plant",
141
+ datastakeId: "LOC-00000000242",
142
+ description: "A mineral processing facility that handles various types of minerals extracted from nearby mining sites.",
143
+ data: [
144
+ {
145
+ _id: "68af116e2cb57a4e3dd2e057",
146
+ createdBy: "4274fdb4-2798-46ea-a0a6-b4af5d92566e",
147
+ form: "event",
148
+ id: "91c3176a-d312-4259-9ddf-9d286ff6df88",
149
+ datastakeId: "EV-000000000151",
150
+ name: "Processing Efficiency Improvement",
151
+ authorId: "7e17f076-09e7-4668-927c-11c12ccd1346",
152
+ collectId: "d78271301d04f76dfe0f70ce3c9e114ffe4dc4e0",
153
+ country: "CD",
154
+ date: "2025-08-20",
155
+ typeOfEvent: "initiative",
156
+ implementers: [],
157
+ associatedSubjects: [],
158
+ testimonialsSource: [],
159
+ pictures: [],
160
+ documents: [],
161
+ channels: ["NAS-00000000106"],
162
+ published: true,
163
+ version: 1,
164
+ identifiedPerpetrators: [],
165
+ identifiedVictims: [],
166
+ assistedVictims: [],
167
+ mitigationMeasures: [],
168
+ createdAt: "2025-08-20T00:00:00.000Z",
169
+ updatedAt: "2025-08-20T14:12:21.395Z",
170
+ __v: 0,
171
+ percentageCompletion: 75,
172
+ eventCategory: "improvement",
173
+ incindentType: null,
174
+ initiative: "efficiency",
175
+ meta: null,
176
+ namespace: "initiative",
177
+ primarySource: null,
178
+ severity: "low",
179
+ sources: ["7e17f076-09e7-4668-927c-11c12ccd1346"],
180
+ type: "improvement_initiative",
181
+ description: "An initiative to improve processing efficiency through new technology implementation.",
182
+ },
183
+ ],
184
+ type: "Processing Plant",
185
+ total: 1,
186
+ sources: 1,
187
+ },
188
+ ],
189
+ filtersConfig: [
190
+ {
191
+ label: "Event Type",
192
+ placeholder: "Select",
193
+ key: "type",
194
+ type: "select",
195
+ value: "A",
196
+ options: [
197
+ { label: "All Events", value: "A" },
198
+ { label: "Incidents", value: "incident" },
199
+ { label: "Initiatives", value: "initiative" },
200
+ { label: "Testimonials", value: "testimonials" },
201
+ ],
202
+ },
203
+ {
204
+ label: "Severity",
205
+ placeholder: "Select",
206
+ key: "severity",
207
+ type: "select",
208
+ value: undefined,
209
+ options: [
210
+ { label: "All", value: "all" },
211
+ { label: "Low", value: "low" },
212
+ { label: "Moderate", value: "moderate" },
213
+ { label: "Major", value: "major" },
214
+ ],
215
+ },
216
+ {
217
+ type: "slider",
218
+ label: "Completion Percentage",
219
+ key: "completion",
220
+ },
221
+ ],
222
+ onFilterChange: (v) => {
223
+ console.log(v);
224
+ },
225
+ // tooltipAsText: true,
226
+ primaryLink: true,
227
+ renderSider: () =>
228
+ isMineSite ? (
229
+ <div className="body-list">
230
+ <div className="body-row">
231
+ <span className="label">Event Type</span>
232
+ <span>Mixed</span>
233
+ </div>
234
+
235
+ <div className="body-row">
236
+ <span className="label">Total Events</span>
237
+ <span>4</span>
238
+ </div>
239
+
240
+ <div className="body-row">
241
+ <span className="label">Severity</span>
242
+ <span>Mixed</span>
243
+ </div>
244
+ </div>
245
+ ) : (
246
+ <div className="daf-table-wrapper extra-small">
247
+ <DAFTable
248
+ loading={false}
249
+ scroll={{ y: 300 }}
250
+ className="no-padding no-margin"
251
+ data={[
252
+ { event: "Mining Collapse", type: "Incident", severity: "Moderate", key: 0 },
253
+ { event: "Security Request", type: "Testimonial", severity: "Low", key: 1 },
254
+ { event: "Safety Incident", type: "Incident", severity: "Major", key: 2 },
255
+ { event: "Efficiency Improvement", type: "Initiative", severity: "Low", key: 3 },
256
+ ]}
257
+ pagination={false}
258
+ columns={[
259
+ {
260
+ title: "Event",
261
+ dataIndex: "event",
262
+ key: "event",
263
+ ellipsis: true,
264
+ width: 120,
265
+ },
266
+ {
267
+ title: "Type",
268
+ dataIndex: "type",
269
+ key: "type",
270
+ width: 80,
271
+ render: (_, all) => {
272
+ return (
273
+ <MoreTags values={[{ label: all.type }]} maxTextCont={40} />
274
+ );
275
+ },
276
+ },
277
+ {
278
+ title: "Severity",
279
+ dataIndex: "severity",
280
+ key: "severity",
281
+ width: 80,
282
+ render: (_, all) => {
283
+ return (
284
+ <MoreTags values={[{ label: all.severity }]} maxTextCont={40} />
285
+ );
286
+ },
287
+ },
288
+ {
289
+ title: "",
290
+ dataIndex: "action",
291
+ key: "action",
292
+ width: 34,
293
+ render: (_, all) => {
294
+ return <CustomIcon name="LinkNewTab" width={12} height={12} />;
295
+ },
296
+ },
297
+ ]}
298
+ rowKey="key"
299
+ />
300
+ </div>
301
+ ),
302
+ renderTooltip: (data) => {
303
+ const correctiveActionsCount = data?.data?.filter(
304
+ (d) => d.type === "correctiveActions",
305
+ ).length;
306
+
307
+ const majorIncidents = data?.data?.filter(
308
+ (d) => d.type === "major_incident",
309
+ ).length;
310
+
311
+ const minorIncidents = data?.data?.filter(
312
+ (d) => d.type === "minor_incident",
313
+ ).length;
314
+
315
+ const moderateIncidents = data?.data?.filter(
316
+ (d) => d.type === "moderate_incident",
317
+ ).length;
318
+
319
+ return [
320
+ {
321
+ label: "Major Incidents",
322
+ color: "#F04438",
323
+ value: majorIncidents || 0,
324
+ },
325
+ {
326
+ label: "Moderate Incidents",
327
+ color: "#FF7A45",
328
+ value: moderateIncidents || 0,
329
+ },
330
+ {
331
+ label: "Minor Incidents",
332
+ color: "#FFC069",
333
+ value: minorIncidents || 0,
334
+ },
335
+ {
336
+ label: "Corrective Actions",
337
+ color: "#12b76a",
338
+ value: correctiveActionsCount || 0,
339
+ },
340
+ {
341
+ label: "Total Events",
342
+ value: data?.total || 0,
343
+ },
344
+ {
345
+ label: "Sources",
346
+ value: data?.sources || 0,
347
+ },
348
+ ];
349
+ },
350
+ link: true,
351
+ onClickLink: (data) => {
352
+ console.log(data);
353
+ },
354
+ };
@@ -6,6 +6,34 @@ const Style = styled.div`
6
6
  position: relative;
7
7
  width: 100%;
8
8
  height: 472px;
9
+
10
+ /* CRITICAL: Protect against Leaflet CSS interference */
11
+ .daf-simple-globe-container {
12
+ position: relative;
13
+ width: 100%;
14
+ height: 100%;
15
+
16
+ /* Override Leaflet CSS that interferes with Mapbox */
17
+ .mapboxgl-canvas-container {
18
+ position: relative !important;
19
+ left: auto !important;
20
+ top: auto !important;
21
+ }
22
+
23
+ .mapboxgl-canvas-container canvas {
24
+ position: relative !important;
25
+ left: auto !important;
26
+ top: auto !important;
27
+ transform: none !important;
28
+ }
29
+
30
+ /* Protect markers from Leaflet positioning */
31
+ .daf-globe-marker {
32
+ position: relative !important;
33
+ left: auto !important;
34
+ top: auto !important;
35
+ }
36
+ }
9
37
 
10
38
  .filter-cont {
11
39
  position: absolute;
@@ -59,6 +87,7 @@ const Style = styled.div`
59
87
  height: 100%;
60
88
  }
61
89
 
90
+ /* Narrow marker styling used by legacy components; avoid width/height overrides for SimpleGlobe */
62
91
  .map-marker {
63
92
  text-align: center;
64
93
  width 100%;
package/src/index.js CHANGED
@@ -62,6 +62,7 @@ export { default as TooltipIcon } from "./@daf/core/components/Icon/TooltipIcon.
62
62
  export { default as MineSiteMap } from "./@daf/core/components/Dashboard/Map/index.jsx";
63
63
  export { default as InExpandableWidgetMap } from "./@daf/core/components/Dashboard/Map/InExpandableWidgetMap/index.jsx";
64
64
  export { default as Globe } from "./@daf/core/components/Dashboard/Globe/index.jsx";
65
+ export { default as SimpleGlobe } from "./@daf/core/components/Dashboard/Globe/SimpleGlobe.jsx";
65
66
  export { default as WidgetPlaceholder } from "./@daf/core/components/Dashboard/Widget/WidgetPlaceholder/index.jsx";
66
67
  export { default as Steps } from "./@daf/core/components/Dashboard/Steps/index.jsx";
67
68
  export { default as DashboardLayout } from "./@daf/core/components/Dashboard/DashboardLayout/index.jsx";
package/.env DELETED
@@ -1,8 +0,0 @@
1
- REACT_APP_API_KEY=
2
- REACT_APP_AUTH_DOMAIN=
3
- REACT_APP_PROJECT_ID=
4
- REACT_APP_STORAGE_BUCKED=
5
- REACT_APP_SENDER_ID=
6
- REACT_APP_APP_ID=
7
- REACT_APP_MEASUREMENT_ID=
8
- REACT_APP_VAPID_KEY=
@@ -1,13 +0,0 @@
1
- {
2
- "cSpell.words": ["cukura"],
3
- "files.autoSave": "afterDelay",
4
- "editor.wordWrap": "on",
5
- "editor.autoClosingBrackets": "always",
6
- "editor.autoClosingComments": "always",
7
- "editor.autoClosingQuotes": "always",
8
- "editor.defaultFormatter": "esbenp.prettier-vscode",
9
- "editor.formatOnPaste": true,
10
- "editor.formatOnSave": true,
11
- "notebook.defaultFormatter": "esbenp.prettier-vscode",
12
- "javascript.format.semicolons": "insert"
13
- }