Update template 2 (#394)
* refactor: updated template and design tokens * refactor: updated design tokens --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>
taylor_socfortress committed
Jan 16, 2025 at 08:41 UTC
0a0a6e5aa42cd8df111afde6416b5a39c24ccf3f
105 files changed
+1814
-3552
frontend/cypress/e2e/example.cy.ts
+1
-1
@@ -3,6 +3,6 @@
3
describe("My First Test", () => {
4
it("visits the app root url", () => {
5
cy.visit("/")
6
- cy.contains(".title", "SOCFortress CoPilot")
6
+ cy.contains(`[data-test="login-title"]`, "SOCFortress CoPilot")
7
})
8
})
frontend/figma-tokens.json
+208
-1332
@@ -1,6 +1,6 @@
1
{
2
"global": {
3
- "border-radius-base": {
3
+ "border-radius-default": {
4
"value": "8px",
5
"type": "borderRadius"
6
},
@@ -8,11 +8,11 @@
8
"value": "4px",
9
"type": "borderRadius"
10
},
11
- "line-heights-base": {
12
- "value": "1.35",
11
+ "line-heights-default": {
12
+ "value": "1.25",
13
"type": "lineHeights"
14
},
15
- "font-sizes-base": {
15
+ "font-sizes-default": {
16
"value": "16px",
17
"type": "fontSizes"
18
},
@@ -20,7 +20,19 @@
20
"value": "18px",
21
"type": "fontSizes"
22
},
23
- "font-families-base": {
23
+ "font-weights-default": {
24
+ "value": "400",
25
+ "type": "fontWeights"
26
+ },
27
+ "font-weights-strong": {
28
+ "value": "600",
29
+ "type": "fontWeights"
30
+ },
31
+ "font-weights-card-title": {
32
+ "value": "600",
33
+ "type": "fontWeights"
34
+ },
35
+ "font-families-default": {
36
"value": "'Public Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'",
37
"type": "fontFamilies"
38
},
@@ -33,1493 +45,357 @@
45
"type": "fontFamilies"
46
},
47
"color-light-sidebar-background": {
36
- "value": "#ffffff",
48
+ "value": "rgb(255, 255, 255)",
49
"type": "color"
50
},
51
"color-light-body-background": {
40
- "value": "#f5f7f9",
52
+ "value": "rgb(245, 247, 249)",
53
"type": "color"
54
},
55
"color-light-text": {
44
- "value": "#000000",
56
+ "value": "rgb(0, 0, 0)",
57
"type": "color"
58
},
59
"color-light-text-secondary": {
48
- "value": "#495465",
49
- "type": "color"
50
- },
51
- "color-light-background": {
52
- "value": "#ffffff",
53
- "type": "color"
54
- },
55
- "color-light-background-secondary": {
56
- "value": "#fafbfc",
57
- "type": "color"
58
- },
59
- "color-light-primary": {
60
- "value": "rgb(255, 182, 0)",
61
- "type": "color"
62
- },
63
- "color-light-primary-005": {
64
- "value": "rgba(255, 182, 0, 0.05)",
65
- "type": "color"
66
- },
67
- "color-light-primary-010": {
68
- "value": "rgba(255, 182, 0, 0.1)",
69
- "type": "color"
70
- },
71
- "color-light-primary-015": {
72
- "value": "rgba(255, 182, 0, 0.15)",
73
- "type": "color"
74
- },
75
- "color-light-primary-020": {
76
- "value": "rgba(255, 182, 0, 0.2)",
77
- "type": "color"
78
- },
79
- "color-light-primary-030": {
80
- "value": "rgba(255, 182, 0, 0.3)",
60
+ "value": "rgb(73, 84, 101)",
61
"type": "color"
62
},
83
- "color-light-primary-040": {
84
- "value": "rgba(255, 182, 0, 0.4)",
63
+ "color-light-text-tertiary": {
64
+ "value": "rgb(114, 115, 115)",
65
"type": "color"
66
},
87
- "color-light-primary-050": {
88
- "value": "rgba(255, 182, 0, 0.5)",
67
+ "color-light-background": {
68
+ "value": "rgb(255, 255, 255)",
69
"type": "color"
70
},
91
- "color-light-primary-060": {
92
- "value": "rgba(255, 182, 0, 0.6)",
71
+ "color-light-background-secondary": {
72
+ "value": "rgb(250, 251, 252)",
73
"type": "color"
74
},
95
- "color-light-primary-070": {
96
- "value": "rgba(255, 182, 0, 0.7)",
75
+ "color-light-border": {
76
+ "value": "rgb(226, 230, 233)",
77
"type": "color"
78
},
99
- "color-light-primary-080": {
100
- "value": "rgba(255, 182, 0, 0.8)",
79
+ "color-light-hover": {
80
+ "value": "rgba(221, 224, 225, 0.5)",
81
"type": "color"
82
},
103
- "color-light-primary-090": {
104
- "value": "rgba(255, 182, 0, 0.9)",
83
+ "color-light-primary": {
84
+ "value": "rgb(255, 182, 0)",
85
"type": "color"
86
},
87
"color-light-info": {
108
- "value": "#6267FF",
88
+ "value": "rgb(98, 103, 255)",
89
"type": "color"
90
},
91
"color-light-success": {
112
- "value": "#00B27B",
92
+ "value": "rgb(0, 178, 123)",
93
"type": "color"
94
},
95
"color-light-warning": {
116
- "value": "#E3C22F",
96
+ "value": "rgb(227, 194, 47)",
97
"type": "color"
98
},
99
"color-light-error": {
120
- "value": "#FF0156",
121
- "type": "color"
122
- },
123
- "color-light-info-005": {
124
- "value": "rgba(98, 103, 255, 0.05)",
125
- "type": "color"
126
- },
127
- "color-light-info-010": {
128
- "value": "rgba(98, 103, 255, 0.1)",
129
- "type": "color"
130
- },
131
- "color-light-info-020": {
132
- "value": "rgba(98, 103, 255, 0.2)",
133
- "type": "color"
134
- },
135
- "color-light-info-030": {
136
- "value": "rgba(98, 103, 255, 0.3)",
137
- "type": "color"
138
- },
139
- "color-light-info-040": {
140
- "value": "rgba(98, 103, 255, 0.4)",
141
- "type": "color"
142
- },
143
- "color-light-info-050": {
144
- "value": "rgba(98, 103, 255, 0.5)",
145
- "type": "color"
146
- },
147
- "color-light-info-060": {
148
- "value": "rgba(98, 103, 255, 0.6)",
149
- "type": "color"
150
- },
151
- "color-light-info-070": {
152
- "value": "rgba(98, 103, 255, 0.7)",
153
- "type": "color"
154
- },
155
- "color-light-info-080": {
156
- "value": "rgba(98, 103, 255, 0.8)",
157
- "type": "color"
158
- },
159
- "color-light-info-090": {
160
- "value": "rgba(98, 103, 255, 0.9)",
161
- "type": "color"
162
- },
163
- "color-light-success-005": {
164
- "value": "rgba(0, 178, 123, 0.05)",
165
- "type": "color"
166
- },
167
- "color-light-success-010": {
168
- "value": "rgba(0, 178, 123, 0.1)",
169
- "type": "color"
170
- },
171
- "color-light-success-020": {
172
- "value": "rgba(0, 178, 123, 0.2)",
173
- "type": "color"
174
- },
175
- "color-light-success-030": {
176
- "value": "rgba(0, 178, 123, 0.3)",
177
- "type": "color"
178
- },
179
- "color-light-success-040": {
180
- "value": "rgba(0, 178, 123, 0.4)",
181
- "type": "color"
182
- },
183
- "color-light-success-050": {
184
- "value": "rgba(0, 178, 123, 0.5)",
185
- "type": "color"
186
- },
187
- "color-light-success-060": {
188
- "value": "rgba(0, 178, 123, 0.6)",
189
- "type": "color"
190
- },
191
- "color-light-success-070": {
192
- "value": "rgba(0, 178, 123, 0.7)",
193
- "type": "color"
194
- },
195
- "color-light-success-080": {
196
- "value": "rgba(0, 178, 123, 0.8)",
197
- "type": "color"
198
- },
199
- "color-light-success-090": {
200
- "value": "rgba(0, 178, 123, 0.9)",
201
- "type": "color"
202
- },
203
- "color-light-warning-005": {
204
- "value": "rgba(227, 194, 47, 0.05)",
205
- "type": "color"
206
- },
207
- "color-light-warning-010": {
208
- "value": "rgba(227, 194, 47, 0.1)",
209
- "type": "color"
210
- },
211
- "color-light-warning-020": {
212
- "value": "rgba(227, 194, 47, 0.2)",
213
- "type": "color"
214
- },
215
- "color-light-warning-030": {
216
- "value": "rgba(227, 194, 47, 0.3)",
217
- "type": "color"
218
- },
219
- "color-light-warning-040": {
220
- "value": "rgba(227, 194, 47, 0.4)",
221
- "type": "color"
222
- },
223
- "color-light-warning-050": {
224
- "value": "rgba(227, 194, 47, 0.5)",
100
+ "value": "rgb(255, 1, 86)",
101
"type": "color"
102
},
227
- "color-light-warning-060": {
228
- "value": "rgba(227, 194, 47, 0.6)",
103
+ "color-light-extra-1": {
104
+ "value": "rgb(98, 103, 255)",
105
"type": "color"
106
},
231
- "color-light-warning-070": {
232
- "value": "rgba(227, 194, 47, 0.7)",
107
+ "color-light-extra-2": {
108
+ "value": "rgb(255, 97, 201)",
109
"type": "color"
110
},
235
- "color-light-warning-080": {
236
- "value": "rgba(227, 194, 47, 0.8)",
111
+ "color-light-extra-3": {
112
+ "value": "rgb(227, 194, 47)",
113
"type": "color"
114
},
239
- "color-light-warning-090": {
240
- "value": "rgba(227, 194, 47, 0.9)",
115
+ "color-light-extra-4": {
116
+ "value": "rgb(255, 1, 86)",
117
"type": "color"
118
},
243
- "color-light-error-005": {
244
- "value": "rgba(255, 1, 86, 0.05)",
119
+ "color-dark-sidebar-background": {
120
+ "value": "rgb(29, 31, 37)",
121
"type": "color"
122
},
247
- "color-light-error-010": {
248
- "value": "rgba(255, 1, 86, 0.1)",
123
+ "color-dark-body-background": {
124
+ "value": "rgb(20, 22, 26)",
125
"type": "color"
126
},
251
- "color-light-error-020": {
252
- "value": "rgba(255, 1, 86, 0.2)",
127
+ "color-dark-text": {
128
+ "value": "rgb(255, 255, 255)",
129
"type": "color"
130
},
255
- "color-light-error-030": {
256
- "value": "rgba(255, 1, 86, 0.3)",
131
+ "color-dark-text-secondary": {
132
+ "value": "rgb(172, 181, 190)",
133
"type": "color"
134
},
259
- "color-light-error-040": {
260
- "value": "rgba(255, 1, 86, 0.4)",
135
+ "color-dark-text-tertiary": {
136
+ "value": "rgb(172, 181, 190)",
137
"type": "color"
138
},
263
- "color-light-error-050": {
264
- "value": "rgba(255, 1, 86, 0.5)",
139
+ "color-dark-background": {
140
+ "value": "rgb(38, 40, 45)",
141
"type": "color"
142
},
267
- "color-light-error-060": {
268
- "value": "rgba(255, 1, 86, 0.6)",
143
+ "color-dark-background-secondary": {
144
+ "value": "rgb(29, 31, 37)",
145
"type": "color"
146
},
271
- "color-light-error-070": {
272
- "value": "rgba(255, 1, 86, 0.7)",
147
+ "color-dark-border": {
148
+ "value": "rgb(70, 71, 79)",
149
"type": "color"
150
},
275
- "color-light-error-080": {
276
- "value": "rgba(255, 1, 86, 0.8)",
151
+ "color-dark-hover": {
152
+ "value": "rgba(59, 61, 68, 0.5)",
153
"type": "color"
154
},
279
- "color-light-error-090": {
280
- "value": "rgba(255, 1, 86, 0.9)",
155
+ "color-dark-primary": {
156
+ "value": "rgb(255, 182, 0)",
157
"type": "color"
158
},
283
- "color-light-secondary-1": {
159
+ "color-dark-info": {
160
"value": "rgb(98, 103, 255)",
161
"type": "color"
162
},
287
- "color-light-secondary-1-opacity-005": {
288
- "value": "rgba(98, 103, 255, 0.05)",
163
+ "color-dark-success": {
164
+ "value": "rgb(0, 225, 155)",
165
"type": "color"
166
},
291
- "color-light-secondary-1-opacity-010": {
292
- "value": "rgba(98, 103, 255, 0.1)",
167
+ "color-dark-warning": {
168
+ "value": "rgb(227, 194, 47)",
169
"type": "color"
170
},
295
- "color-light-secondary-1-opacity-020": {
296
- "value": "rgba(98, 103, 255, 0.2)",
171
+ "color-dark-error": {
172
+ "value": "rgb(255, 1, 86)",
173
"type": "color"
174
},
299
- "color-light-secondary-1-opacity-030": {
300
- "value": "rgba(98, 103, 255, 0.3)",
175
+ "color-dark-extra-1": {
176
+ "value": "rgb(98, 103, 255)",
177
"type": "color"
178
},
303
- "color-light-secondary-2": {
179
+ "color-dark-extra-2": {
180
"value": "rgb(255, 97, 201)",
181
"type": "color"
182
},
307
- "color-light-secondary-2-opacity-005": {
308
- "value": "rgba(255, 97, 201, 0.05)",
309
- "type": "color"
310
- },
311
- "color-light-secondary-2-opacity-010": {
312
- "value": "rgba(255, 97, 201, 0.1)",
313
- "type": "color"
314
- },
315
- "color-light-secondary-2-opacity-020": {
316
- "value": "rgba(255, 97, 201, 0.2)",
317
- "type": "color"
318
- },
319
- "color-light-secondary-2-opacity-030": {
320
- "value": "rgba(255, 97, 201, 0.3)",
321
- "type": "color"
322
- },
323
- "color-light-secondary-3": {
183
+ "color-dark-extra-3": {
184
"value": "rgb(227, 194, 47)",
185
"type": "color"
186
},
327
- "color-light-secondary-3-opacity-005": {
328
- "value": "rgba(227, 194, 47, 0.05)",
329
- "type": "color"
330
- },
331
- "color-light-secondary-3-opacity-010": {
332
- "value": "rgba(227, 194, 47, 0.1)",
333
- "type": "color"
334
- },
335
- "color-light-secondary-3-opacity-020": {
336
- "value": "rgba(227, 194, 47, 0.2)",
337
- "type": "color"
338
- },
339
- "color-light-secondary-3-opacity-030": {
340
- "value": "rgba(227, 194, 47, 0.3)",
341
- "type": "color"
342
- },
343
- "color-light-secondary-4": {
187
+ "color-dark-extra-4": {
188
"value": "rgb(255, 1, 86)",
189
"type": "color"
190
},
347
- "color-light-secondary-4-opacity-005": {
348
- "value": "rgba(255, 1, 86, 0.05)",
349
- "type": "color"
350
- },
351
- "color-light-secondary-4-opacity-010": {
352
- "value": "rgba(255, 1, 86, 0.1)",
353
- "type": "color"
354
- },
355
- "color-light-secondary-4-opacity-020": {
356
- "value": "rgba(255, 1, 86, 0.2)",
357
- "type": "color"
358
- },
359
- "color-light-secondary-4-opacity-030": {
360
- "value": "rgba(255, 1, 86, 0.3)",
361
- "type": "color"
362
- },
363
- "color-light-divider-005": {
364
- "value": "rgba(0, 0, 0, 0.05)",
365
- "type": "color"
366
- },
367
- "color-light-divider-010": {
368
- "value": "rgba(0, 0, 0, 0.1)",
369
- "type": "color"
370
- },
371
- "color-light-divider-020": {
372
- "value": "rgba(0, 0, 0, 0.2)",
373
- "type": "color"
374
- },
375
- "color-light-divider-030": {
376
- "value": "rgba(0, 0, 0, 0.3)",
377
- "type": "color"
378
- },
379
- "color-light-hover-005": {
380
- "value": "rgba(0, 0, 0, 0.05)",
381
- "type": "color"
382
- },
383
- "color-light-hover-010": {
384
- "value": "rgba(0, 0, 0, 0.1)",
385
- "type": "color"
386
- },
387
- "color-light-hover-050": {
388
- "value": "rgba(0, 0, 0, 0.5)",
389
- "type": "color"
390
- },
391
- "color-dark-sidebar-background": {
392
- "value": "#1D1F25",
393
- "type": "color"
394
- },
395
- "color-dark-body-background": {
396
- "value": "#14161A",
397
- "type": "color"
398
- },
399
- "color-dark-text": {
400
- "value": "#ffffff",
401
- "type": "color"
191
+ "typo-h1": {
192
+ "value": {
193
+ "fontFamily": "{font-families-display}",
194
+ "fontSize": "30px",
195
+ "fontWeight": "700",
196
+ "lineHeight": "38"
197
+ },
198
+ "type": "typography"
199
},
403
- "color-dark-text-secondary": {
404
- "value": "#ACB5BE",
405
- "type": "color"
200
+ "typo-h2": {
201
+ "value": {
202
+ "fontFamily": "{font-families-display}",
203
+ "fontSize": "26px",
204
+ "fontWeight": "700",
205
+ "lineHeight": "33"
206
+ },
207
+ "type": "typography"
208
},
407
- "color-dark-background": {
408
- "value": "#26282d",
409
- "type": "color"
209
+ "typo-h3": {
210
+ "value": {
211
+ "fontFamily": "{font-families-display}",
212
+ "fontSize": "22px",
213
+ "fontWeight": "700",
214
+ "lineHeight": "28"
215
+ },
216
+ "type": "typography"
217
},
411
- "color-dark-background-secondary": {
412
- "value": "#1D1F25",
413
- "type": "color"
218
+ "typo-h4": {
219
+ "value": {
220
+ "fontFamily": "{font-families-display}",
221
+ "fontSize": "18px",
222
+ "fontWeight": "500",
223
+ "lineHeight": "23"
224
+ },
225
+ "type": "typography"
226
},
415
- "color-dark-primary": {
416
- "value": "rgb(255, 182, 0)",
417
- "type": "color"
227
+ "typo-h5": {
228
+ "value": {
229
+ "fontFamily": "{font-families-display}",
230
+ "fontSize": "14px",
231
+ "fontWeight": "700",
232
+ "lineHeight": "18"
233
+ },
234
+ "type": "typography"
235
},
419
- "color-dark-primary-005": {
420
- "value": "rgba(255, 182, 0, 0.05)",
421
- "type": "color"
236
+ "typo-h6": {
237
+ "value": {
238
+ "fontFamily": "{font-families-default}",
239
+ "fontSize": "12px",
240
+ "fontWeight": "500",
241
+ "lineHeight": "15"
242
+ },
243
+ "type": "typography"
244
},
423
- "color-dark-primary-010": {
424
- "value": "rgba(255, 182, 0, 0.1)",
245
+ "typo-p": {
246
+ "value": {
247
+ "fontFamily": "{font-families-default}",
248
+ "fontSize": "{font-sizes-default}",
249
+ "lineHeight": "20"
250
+ },
251
+ "type": "typography"
252
+ }
253
+ },
254
+ "light": {
255
+ "color-sidebar-background": {
256
+ "value": "{color-light-sidebar-background}",
257
"type": "color"
258
},
427
- "color-dark-primary-015": {
428
- "value": "rgba(255, 182, 0, 0.15)",
259
+ "color-body-background": {
260
+ "value": "{color-light-body-background}",
261
"type": "color"
262
},
431
- "color-dark-primary-020": {
432
- "value": "rgba(255, 182, 0, 0.2)",
263
+ "color-text": {
264
+ "value": "{color-light-text}",
265
"type": "color"
266
},
435
- "color-dark-primary-030": {
436
- "value": "rgba(255, 182, 0, 0.3)",
267
+ "color-text-secondary": {
268
+ "value": "{color-light-text-secondary}",
269
"type": "color"
270
},
439
- "color-dark-primary-040": {
440
- "value": "rgba(255, 182, 0, 0.4)",
271
+ "color-text-tertiary": {
272
+ "value": "{color-light-text-tertiary}",
273
"type": "color"
274
},
443
- "color-dark-primary-050": {
444
- "value": "rgba(255, 182, 0, 0.5)",
275
+ "color-background": {
276
+ "value": "{color-light-background}",
277
"type": "color"
278
},
447
- "color-dark-primary-060": {
448
- "value": "rgba(255, 182, 0, 0.6)",
279
+ "color-background-secondary": {
280
+ "value": "{color-light-background-secondary}",
281
"type": "color"
282
},
451
- "color-dark-primary-070": {
452
- "value": "rgba(255, 182, 0, 0.7)",
283
+ "color-border": {
284
+ "value": "{color-light-border}",
285
"type": "color"
286
},
455
- "color-dark-primary-080": {
456
- "value": "rgba(255, 182, 0, 0.8)",
287
+ "color-hover": {
288
+ "value": "{color-light-hover}",
289
"type": "color"
290
},
459
- "color-dark-primary-090": {
460
- "value": "rgba(255, 182, 0, 0.9)",
291
+ "color-primary": {
292
+ "value": "{color-light-primary}",
293
"type": "color"
294
},
463
- "color-dark-info": {
464
- "value": "#6267FF",
295
+ "color-info": {
296
+ "value": "{color-light-info}",
297
"type": "color"
298
},
467
- "color-dark-success": {
468
- "value": "#00E19B",
299
+ "color-success": {
300
+ "value": "{color-light-success}",
301
"type": "color"
302
},
471
- "color-dark-warning": {
472
- "value": "#E3C22F",
303
+ "color-warning": {
304
+ "value": "{color-light-warning}",
305
"type": "color"
306
},
475
- "color-dark-error": {
476
- "value": "#FF0156",
307
+ "color-error": {
308
+ "value": "{color-light-error}",
309
"type": "color"
310
},
479
- "color-dark-info-005": {
480
- "value": "rgba(98, 103, 255, 0.05)",
311
+ "color-extra-1": {
312
+ "value": "{color-light-extra-1}",
313
"type": "color"
314
},
483
- "color-dark-info-010": {
484
- "value": "rgba(98, 103, 255, 0.1)",
315
+ "color-extra-2": {
316
+ "value": "{color-light-extra-2}",
317
"type": "color"
318
},
487
- "color-dark-info-020": {
488
- "value": "rgba(98, 103, 255, 0.2)",
319
+ "color-extra-3": {
320
+ "value": "{color-light-extra-3}",
321
"type": "color"
322
},
491
- "color-dark-info-030": {
492
- "value": "rgba(98, 103, 255, 0.3)",
323
+ "color-extra-4": {
324
+ "value": "{color-light-extra-4}",
325
"type": "color"
494
- },
495
- "color-dark-info-040": {
496
- "value": "rgba(98, 103, 255, 0.4)",
326
+ }
327
+ },
328
+ "dark": {
329
+ "color-sidebar-background": {
330
+ "value": "{color-dark-sidebar-background}",
331
"type": "color"
332
},
499
- "color-dark-info-050": {
500
- "value": "rgba(98, 103, 255, 0.5)",
333
+ "color-body-background": {
334
+ "value": "{color-dark-body-background}",
335
"type": "color"
336
},
503
- "color-dark-info-060": {
504
- "value": "rgba(98, 103, 255, 0.6)",
337
+ "color-text": {
338
+ "value": "{color-dark-text}",
339
"type": "color"
340
},
507
- "color-dark-info-070": {
508
- "value": "rgba(98, 103, 255, 0.7)",
341
+ "color-text-secondary": {
342
+ "value": "{color-dark-text-secondary}",
343
"type": "color"
344
},
511
- "color-dark-info-080": {
512
- "value": "rgba(98, 103, 255, 0.8)",
345
+ "color-text-tertiary": {
346
+ "value": "{color-dark-text-tertiary}",
347
"type": "color"
348
},
515
- "color-dark-info-090": {
516
- "value": "rgba(98, 103, 255, 0.9)",
349
+ "color-background": {
350
+ "value": "{color-dark-background}",
351
"type": "color"
352
},
519
- "color-dark-success-005": {
520
- "value": "rgba(0, 178, 123, 0.05)",
353
+ "color-background-secondary": {
354
+ "value": "{color-dark-background-secondary}",
355
"type": "color"
356
},
523
- "color-dark-success-010": {
524
- "value": "rgba(0, 178, 123, 0.1)",
357
+ "color-border": {
358
+ "value": "{color-dark-border}",
359
"type": "color"
360
},
527
- "color-dark-success-020": {
528
- "value": "rgba(0, 178, 123, 0.2)",
361
+ "color-hover": {
362
+ "value": "{color-dark-hover}",
363
"type": "color"
364
},
531
- "color-dark-success-030": {
532
- "value": "rgba(0, 178, 123, 0.3)",
365
+ "color-primary": {
366
+ "value": "{color-dark-primary}",
367
"type": "color"
368
},
535
- "color-dark-success-040": {
536
- "value": "rgba(0, 178, 123, 0.4)",
369
+ "color-info": {
370
+ "value": "{color-dark-info}",
371
"type": "color"
372
},
539
- "color-dark-success-050": {
540
- "value": "rgba(0, 178, 123, 0.5)",
373
+ "color-success": {
374
+ "value": "{color-dark-success}",
375
"type": "color"
376
},
543
- "color-dark-success-060": {
544
- "value": "rgba(0, 178, 123, 0.6)",
545
- "type": "color"
546
- },
547
- "color-dark-success-070": {
548
- "value": "rgba(0, 178, 123, 0.7)",
549
- "type": "color"
550
- },
551
- "color-dark-success-080": {
552
- "value": "rgba(0, 178, 123, 0.8)",
553
- "type": "color"
554
- },
555
- "color-dark-success-090": {
556
- "value": "rgba(0, 178, 123, 0.9)",
557
- "type": "color"
558
- },
559
- "color-dark-warning-005": {
560
- "value": "rgba(227, 194, 47, 0.05)",
561
- "type": "color"
562
- },
563
- "color-dark-warning-010": {
564
- "value": "rgba(227, 194, 47, 0.1)",
565
- "type": "color"
566
- },
567
- "color-dark-warning-020": {
568
- "value": "rgba(227, 194, 47, 0.2)",
569
- "type": "color"
570
- },
571
- "color-dark-warning-030": {
572
- "value": "rgba(227, 194, 47, 0.3)",
573
- "type": "color"
574
- },
575
- "color-dark-warning-040": {
576
- "value": "rgba(227, 194, 47, 0.4)",
577
- "type": "color"
578
- },
579
- "color-dark-warning-050": {
580
- "value": "rgba(227, 194, 47, 0.5)",
581
- "type": "color"
582
- },
583
- "color-dark-warning-060": {
584
- "value": "rgba(227, 194, 47, 0.6)",
585
- "type": "color"
586
- },
587
- "color-dark-warning-070": {
588
- "value": "rgba(227, 194, 47, 0.7)",
589
- "type": "color"
590
- },
591
- "color-dark-warning-080": {
592
- "value": "rgba(227, 194, 47, 0.8)",
593
- "type": "color"
594
- },
595
- "color-dark-warning-090": {
596
- "value": "rgba(227, 194, 47, 0.9)",
597
- "type": "color"
598
- },
599
- "color-dark-error-005": {
600
- "value": "rgba(255, 1, 86, 0.05)",
601
- "type": "color"
602
- },
603
- "color-dark-error-010": {
604
- "value": "rgba(255, 1, 86, 0.1)",
605
- "type": "color"
606
- },
607
- "color-dark-error-020": {
608
- "value": "rgba(255, 1, 86, 0.2)",
609
- "type": "color"
610
- },
611
- "color-dark-error-030": {
612
- "value": "rgba(255, 1, 86, 0.3)",
613
- "type": "color"
614
- },
615
- "color-dark-error-040": {
616
- "value": "rgba(255, 1, 86, 0.4)",
617
- "type": "color"
618
- },
619
- "color-dark-error-050": {
620
- "value": "rgba(255, 1, 86, 0.5)",
621
- "type": "color"
622
- },
623
- "color-dark-error-060": {
624
- "value": "rgba(255, 1, 86, 0.6)",
625
- "type": "color"
626
- },
627
- "color-dark-error-070": {
628
- "value": "rgba(255, 1, 86, 0.7)",
629
- "type": "color"
630
- },
631
- "color-dark-error-080": {
632
- "value": "rgba(255, 1, 86, 0.8)",
633
- "type": "color"
634
- },
635
- "color-dark-error-090": {
636
- "value": "rgba(255, 1, 86, 0.9)",
637
- "type": "color"
638
- },
639
- "color-dark-secondary-1": {
640
- "value": "rgb(98, 103, 255)",
641
- "type": "color"
642
- },
643
- "color-dark-secondary-1-opacity-005": {
644
- "value": "rgba(98, 103, 255, 0.05)",
645
- "type": "color"
646
- },
647
- "color-dark-secondary-1-opacity-010": {
648
- "value": "rgba(98, 103, 255, 0.1)",
649
- "type": "color"
650
- },
651
- "color-dark-secondary-1-opacity-020": {
652
- "value": "rgba(98, 103, 255, 0.2)",
653
- "type": "color"
654
- },
655
- "color-dark-secondary-1-opacity-030": {
656
- "value": "rgba(98, 103, 255, 0.3)",
657
- "type": "color"
658
- },
659
- "color-dark-secondary-2": {
660
- "value": "rgb(255, 97, 201)",
661
- "type": "color"
662
- },
663
- "color-dark-secondary-2-opacity-005": {
664
- "value": "rgba(255, 97, 201, 0.05)",
665
- "type": "color"
666
- },
667
- "color-dark-secondary-2-opacity-010": {
668
- "value": "rgba(255, 97, 201, 0.1)",
669
- "type": "color"
670
- },
671
- "color-dark-secondary-2-opacity-020": {
672
- "value": "rgba(255, 97, 201, 0.2)",
673
- "type": "color"
674
- },
675
- "color-dark-secondary-2-opacity-030": {
676
- "value": "rgba(255, 97, 201, 0.3)",
677
- "type": "color"
678
- },
679
- "color-dark-secondary-3": {
680
- "value": "rgb(227, 194, 47)",
681
- "type": "color"
682
- },
683
- "color-dark-secondary-3-opacity-005": {
684
- "value": "rgba(227, 194, 47, 0.05)",
685
- "type": "color"
686
- },
687
- "color-dark-secondary-3-opacity-010": {
688
- "value": "rgba(227, 194, 47, 0.1)",
689
- "type": "color"
690
- },
691
- "color-dark-secondary-3-opacity-020": {
692
- "value": "rgba(227, 194, 47, 0.2)",
693
- "type": "color"
694
- },
695
- "color-dark-secondary-3-opacity-030": {
696
- "value": "rgba(227, 194, 47, 0.3)",
697
- "type": "color"
698
- },
699
- "color-dark-secondary-4": {
700
- "value": "rgb(255, 1, 86)",
701
- "type": "color"
702
- },
703
- "color-dark-secondary-4-opacity-005": {
704
- "value": "rgba(255, 1, 86, 0.05)",
705
- "type": "color"
706
- },
707
- "color-dark-secondary-4-opacity-010": {
708
- "value": "rgba(255, 1, 86, 0.1)",
709
- "type": "color"
710
- },
711
- "color-dark-secondary-4-opacity-020": {
712
- "value": "rgba(255, 1, 86, 0.2)",
713
- "type": "color"
714
- },
715
- "color-dark-secondary-4-opacity-030": {
716
- "value": "rgba(255, 1, 86, 0.3)",
717
- "type": "color"
718
- },
719
- "color-dark-divider-005": {
720
- "value": "rgba(255, 255, 255, 0.05)",
721
- "type": "color"
722
- },
723
- "color-dark-divider-010": {
724
- "value": "rgba(255, 255, 255, 0.1)",
725
- "type": "color"
726
- },
727
- "color-dark-divider-020": {
728
- "value": "rgba(255, 255, 255, 0.2)",
729
- "type": "color"
730
- },
731
- "color-dark-divider-030": {
732
- "value": "rgba(255, 255, 255, 0.3)",
733
- "type": "color"
734
- },
735
- "color-dark-hover-005": {
736
- "value": "rgba(255, 255, 255, 0.05)",
737
- "type": "color"
738
- },
739
- "color-dark-hover-010": {
740
- "value": "rgba(255, 255, 255, 0.1)",
741
- "type": "color"
742
- },
743
- "color-dark-hover-050": {
744
- "value": "rgba(255, 255, 255, 0.5)",
745
- "type": "color"
746
- },
747
- "typo-h1": {
748
- "value": {
749
- "fontFamily": "{font-families-display}",
750
- "fontSize": "30px",
751
- "fontWeight": "700",
752
- "lineHeight": "41"
753
- },
754
- "type": "typography"
755
- },
756
- "typo-h2": {
757
- "value": {
758
- "fontFamily": "{font-families-display}",
759
- "fontSize": "26px",
760
- "fontWeight": "700",
761
- "lineHeight": "35"
762
- },
763
- "type": "typography"
764
- },
765
- "typo-h3": {
766
- "value": {
767
- "fontFamily": "{font-families-display}",
768
- "fontSize": "22px",
769
- "fontWeight": "700",
770
- "lineHeight": "30"
771
- },
772
- "type": "typography"
773
- },
774
- "typo-h4": {
775
- "value": {
776
- "fontFamily": "{font-families-display}",
777
- "fontSize": "18px",
778
- "fontWeight": "500",
779
- "lineHeight": "24"
780
- },
781
- "type": "typography"
782
- },
783
- "typo-h5": {
784
- "value": {
785
- "fontFamily": "{font-families-display}",
786
- "fontSize": "14px",
787
- "fontWeight": "700",
788
- "lineHeight": "19"
789
- },
790
- "type": "typography"
791
- },
792
- "typo-h6": {
793
- "value": {
794
- "fontFamily": "{font-families-base}",
795
- "fontSize": "12px",
796
- "fontWeight": "500",
797
- "lineHeight": "16"
798
- },
799
- "type": "typography"
800
- },
801
- "typo-p": {
802
- "value": {
803
- "fontFamily": "{font-families-base}",
804
- "fontSize": "{font-sizes-base}",
805
- "lineHeight": "22"
806
- },
807
- "type": "typography"
808
- }
809
- },
810
- "light": {
811
- "color-sidebar-background": {
812
- "value": "{color-light-sidebar-background}",
813
- "type": "color"
814
- },
815
- "color-body-background": {
816
- "value": "{color-light-body-background}",
817
- "type": "color"
818
- },
819
- "color-text": {
820
- "value": "{color-light-text}",
821
- "type": "color"
822
- },
823
- "color-text-secondary": {
824
- "value": "{color-light-text-secondary}",
825
- "type": "color"
826
- },
827
- "color-background": {
828
- "value": "{color-light-background}",
829
- "type": "color"
830
- },
831
- "color-background-secondary": {
832
- "value": "{color-light-background-secondary}",
833
- "type": "color"
834
- },
835
- "color-primary": {
836
- "value": "{color-light-primary}",
837
- "type": "color"
838
- },
839
- "color-primary-005": {
840
- "value": "{color-light-primary-005}",
841
- "type": "color"
842
- },
843
- "color-primary-010": {
844
- "value": "{color-light-primary-010}",
845
- "type": "color"
846
- },
847
- "color-primary-015": {
848
- "value": "{color-light-primary-015}",
849
- "type": "color"
850
- },
851
- "color-primary-020": {
852
- "value": "{color-light-primary-020}",
853
- "type": "color"
854
- },
855
- "color-primary-030": {
856
- "value": "{color-light-primary-030}",
857
- "type": "color"
858
- },
859
- "color-primary-040": {
860
- "value": "{color-light-primary-040}",
861
- "type": "color"
862
- },
863
- "color-primary-050": {
864
- "value": "{color-light-primary-050}",
865
- "type": "color"
866
- },
867
- "color-primary-060": {
868
- "value": "{color-light-primary-060}",
869
- "type": "color"
870
- },
871
- "color-primary-070": {
872
- "value": "{color-light-primary-070}",
873
- "type": "color"
874
- },
875
- "color-primary-080": {
876
- "value": "{color-light-primary-080}",
877
- "type": "color"
878
- },
879
- "color-primary-090": {
880
- "value": "{color-light-primary-090}",
881
- "type": "color"
882
- },
883
- "color-info": {
884
- "value": "{color-light-info}",
885
- "type": "color"
886
- },
887
- "color-success": {
888
- "value": "{color-light-success}",
889
- "type": "color"
890
- },
891
- "color-warning": {
892
- "value": "{color-light-warning}",
893
- "type": "color"
894
- },
895
- "color-error": {
896
- "value": "{color-light-error}",
897
- "type": "color"
898
- },
899
- "color-info-005": {
900
- "value": "{color-light-info-005}",
901
- "type": "color"
902
- },
903
- "color-info-010": {
904
- "value": "{color-light-info-010}",
905
- "type": "color"
906
- },
907
- "color-info-020": {
908
- "value": "{color-light-info-020}",
909
- "type": "color"
910
- },
911
- "color-info-030": {
912
- "value": "{color-light-info-030}",
913
- "type": "color"
914
- },
915
- "color-info-040": {
916
- "value": "{color-light-info-040}",
917
- "type": "color"
918
- },
919
- "color-info-050": {
920
- "value": "{color-light-info-050}",
921
- "type": "color"
922
- },
923
- "color-info-060": {
924
- "value": "{color-light-info-060}",
925
- "type": "color"
926
- },
927
- "color-info-070": {
928
- "value": "{color-light-info-070}",
929
- "type": "color"
930
- },
931
- "color-info-080": {
932
- "value": "{color-light-info-080}",
933
- "type": "color"
934
- },
935
- "color-info-090": {
936
- "value": "{color-light-info-090}",
937
- "type": "color"
938
- },
939
- "color-success-005": {
940
- "value": "{color-light-success-005}",
941
- "type": "color"
942
- },
943
- "color-success-010": {
944
- "value": "{color-light-success-010}",
945
- "type": "color"
946
- },
947
- "color-success-020": {
948
- "value": "{color-light-success-020}",
949
- "type": "color"
950
- },
951
- "color-success-030": {
952
- "value": "{color-light-success-030}",
953
- "type": "color"
954
- },
955
- "color-success-040": {
956
- "value": "{color-light-success-040}",
957
- "type": "color"
958
- },
959
- "color-success-050": {
960
- "value": "{color-light-success-050}",
961
- "type": "color"
962
- },
963
- "color-success-060": {
964
- "value": "{color-light-success-060}",
965
- "type": "color"
966
- },
967
- "color-success-070": {
968
- "value": "{color-light-success-070}",
969
- "type": "color"
970
- },
971
- "color-success-080": {
972
- "value": "{color-light-success-080}",
973
- "type": "color"
974
- },
975
- "color-success-090": {
976
- "value": "{color-light-success-090}",
977
- "type": "color"
978
- },
979
- "color-warning-005": {
980
- "value": "{color-light-warning-005}",
981
- "type": "color"
982
- },
983
- "color-warning-010": {
984
- "value": "{color-light-warning-010}",
985
- "type": "color"
986
- },
987
- "color-warning-020": {
988
- "value": "{color-light-warning-020}",
989
- "type": "color"
990
- },
991
- "color-warning-030": {
992
- "value": "{color-light-warning-030}",
993
- "type": "color"
994
- },
995
- "color-warning-040": {
996
- "value": "{color-light-warning-040}",
997
- "type": "color"
998
- },
999
- "color-warning-050": {
1000
- "value": "{color-light-warning-050}",
1001
- "type": "color"
1002
- },
1003
- "color-warning-060": {
1004
- "value": "{color-light-warning-060}",
1005
- "type": "color"
1006
- },
1007
- "color-warning-070": {
1008
- "value": "{color-light-warning-070}",
1009
- "type": "color"
1010
- },
1011
- "color-warning-080": {
1012
- "value": "{color-light-warning-080}",
1013
- "type": "color"
1014
- },
1015
- "color-warning-090": {
1016
- "value": "{color-light-warning-090}",
1017
- "type": "color"
1018
- },
1019
- "color-error-005": {
1020
- "value": "{color-light-error-005}",
1021
- "type": "color"
1022
- },
1023
- "color-error-010": {
1024
- "value": "{color-light-error-010}",
1025
- "type": "color"
1026
- },
1027
- "color-error-020": {
1028
- "value": "{color-light-error-020}",
1029
- "type": "color"
1030
- },
1031
- "color-error-030": {
1032
- "value": "{color-light-error-030}",
1033
- "type": "color"
1034
- },
1035
- "color-error-040": {
1036
- "value": "{color-light-error-040}",
1037
- "type": "color"
1038
- },
1039
- "color-error-050": {
1040
- "value": "{color-light-error-050}",
1041
- "type": "color"
1042
- },
1043
- "color-error-060": {
1044
- "value": "{color-light-error-060}",
1045
- "type": "color"
1046
- },
1047
- "color-error-070": {
1048
- "value": "{color-light-error-070}",
1049
- "type": "color"
1050
- },
1051
- "color-error-080": {
1052
- "value": "{color-light-error-080}",
1053
- "type": "color"
1054
- },
1055
- "color-error-090": {
1056
- "value": "{color-light-error-090}",
1057
- "type": "color"
1058
- },
1059
- "color-secondary-1": {
1060
- "value": "{color-light-secondary-1}",
1061
- "type": "color"
1062
- },
1063
- "color-secondary-1-opacity-005": {
1064
- "value": "{color-light-secondary-1-opacity-005}",
1065
- "type": "color"
1066
- },
1067
- "color-secondary-1-opacity-010": {
1068
- "value": "{color-light-secondary-1-opacity-010}",
1069
- "type": "color"
1070
- },
1071
- "color-secondary-1-opacity-020": {
1072
- "value": "{color-light-secondary-1-opacity-020}",
1073
- "type": "color"
1074
- },
1075
- "color-secondary-1-opacity-030": {
1076
- "value": "{color-light-secondary-1-opacity-030}",
1077
- "type": "color"
1078
- },
1079
- "color-secondary-2": {
1080
- "value": "{color-light-secondary-2}",
1081
- "type": "color"
1082
- },
1083
- "color-secondary-2-opacity-005": {
1084
- "value": "{color-light-secondary-2-opacity-005}",
1085
- "type": "color"
1086
- },
1087
- "color-secondary-2-opacity-010": {
1088
- "value": "{color-light-secondary-2-opacity-010}",
1089
- "type": "color"
1090
- },
1091
- "color-secondary-2-opacity-020": {
1092
- "value": "{color-light-secondary-2-opacity-020}",
1093
- "type": "color"
1094
- },
1095
- "color-secondary-2-opacity-030": {
1096
- "value": "{color-light-secondary-2-opacity-030}",
1097
- "type": "color"
1098
- },
1099
- "color-secondary-3": {
1100
- "value": "{color-light-secondary-3}",
1101
- "type": "color"
1102
- },
1103
- "color-secondary-3-opacity-005": {
1104
- "value": "{color-light-secondary-3-opacity-005}",
1105
- "type": "color"
1106
- },
1107
- "color-secondary-3-opacity-010": {
1108
- "value": "{color-light-secondary-3-opacity-010}",
1109
- "type": "color"
1110
- },
1111
- "color-secondary-3-opacity-020": {
1112
- "value": "{color-light-secondary-3-opacity-020}",
1113
- "type": "color"
1114
- },
1115
- "color-secondary-3-opacity-030": {
1116
- "value": "{color-light-secondary-3-opacity-030}",
1117
- "type": "color"
1118
- },
1119
- "color-secondary-4": {
1120
- "value": "{color-light-secondary-4}",
1121
- "type": "color"
1122
- },
1123
- "color-secondary-4-opacity-005": {
1124
- "value": "{color-light-secondary-4-opacity-005}",
1125
- "type": "color"
1126
- },
1127
- "color-secondary-4-opacity-010": {
1128
- "value": "{color-light-secondary-4-opacity-010}",
1129
- "type": "color"
1130
- },
1131
- "color-secondary-4-opacity-020": {
1132
- "value": "{color-light-secondary-4-opacity-020}",
1133
- "type": "color"
1134
- },
1135
- "color-secondary-4-opacity-030": {
1136
- "value": "{color-light-secondary-4-opacity-030}",
1137
- "type": "color"
1138
- },
1139
- "color-divider-005": {
1140
- "value": "{color-light-divider-005}",
1141
- "type": "color"
1142
- },
1143
- "color-divider-010": {
1144
- "value": "{color-light-divider-010}",
1145
- "type": "color"
1146
- },
1147
- "color-divider-020": {
1148
- "value": "{color-light-divider-020}",
1149
- "type": "color"
1150
- },
1151
- "color-divider-030": {
1152
- "value": "{color-light-divider-030}",
1153
- "type": "color"
1154
- },
1155
- "color-hover-005": {
1156
- "value": "{color-light-hover-005}",
1157
- "type": "color"
1158
- },
1159
- "color-hover-010": {
1160
- "value": "{color-light-hover-010}",
1161
- "type": "color"
1162
- },
1163
- "color-hover-050": {
1164
- "value": "{color-light-hover-050}",
1165
- "type": "color"
1166
- }
1167
- },
1168
- "dark": {
1169
- "color-sidebar-background": {
1170
- "value": "{color-dark-sidebar-background}",
1171
- "type": "color"
1172
- },
1173
- "color-body-background": {
1174
- "value": "{color-dark-body-background}",
1175
- "type": "color"
1176
- },
1177
- "color-text": {
1178
- "value": "{color-dark-text}",
1179
- "type": "color"
1180
- },
1181
- "color-text-secondary": {
1182
- "value": "{color-dark-text-secondary}",
1183
- "type": "color"
1184
- },
1185
- "color-background": {
1186
- "value": "{color-dark-background}",
1187
- "type": "color"
1188
- },
1189
- "color-background-secondary": {
1190
- "value": "{color-dark-background-secondary}",
1191
- "type": "color"
1192
- },
1193
- "color-primary": {
1194
- "value": "{color-dark-primary}",
1195
- "type": "color"
1196
- },
1197
- "color-primary-005": {
1198
- "value": "{color-dark-primary-005}",
1199
- "type": "color"
1200
- },
1201
- "color-primary-010": {
1202
- "value": "{color-dark-primary-010}",
1203
- "type": "color"
1204
- },
1205
- "color-primary-015": {
1206
- "value": "{color-dark-primary-015}",
1207
- "type": "color"
1208
- },
1209
- "color-primary-020": {
1210
- "value": "{color-dark-primary-020}",
1211
- "type": "color"
1212
- },
1213
- "color-primary-030": {
1214
- "value": "{color-dark-primary-030}",
1215
- "type": "color"
1216
- },
1217
- "color-primary-040": {
1218
- "value": "{color-dark-primary-040}",
1219
- "type": "color"
1220
- },
1221
- "color-primary-050": {
1222
- "value": "{color-dark-primary-050}",
1223
- "type": "color"
1224
- },
1225
- "color-primary-060": {
1226
- "value": "{color-dark-primary-060}",
1227
- "type": "color"
1228
- },
1229
- "color-primary-070": {
1230
- "value": "{color-dark-primary-070}",
1231
- "type": "color"
1232
- },
1233
- "color-primary-080": {
1234
- "value": "{color-dark-primary-080}",
1235
- "type": "color"
1236
- },
1237
- "color-primary-090": {
1238
- "value": "{color-dark-primary-090}",
1239
- "type": "color"
1240
- },
1241
- "color-info": {
1242
- "value": "{color-dark-info}",
1243
- "type": "color"
1244
- },
1245
- "color-success": {
1246
- "value": "{color-dark-success}",
1247
- "type": "color"
1248
- },
1249
- "color-warning": {
1250
- "value": "{color-dark-warning}",
377
+ "color-warning": {
378
+ "value": "{color-dark-warning}",
379
"type": "color"
380
},
381
"color-error": {
382
"value": "{color-dark-error}",
383
"type": "color"
384
},
1257
- "color-info-005": {
1258
- "value": "{color-dark-info-005}",
1259
- "type": "color"
1260
- },
1261
- "color-info-010": {
1262
- "value": "{color-dark-info-010}",
1263
- "type": "color"
1264
- },
1265
- "color-info-020": {
1266
- "value": "{color-dark-info-020}",
1267
- "type": "color"
1268
- },
1269
- "color-info-030": {
1270
- "value": "{color-dark-info-030}",
1271
- "type": "color"
1272
- },
1273
- "color-info-040": {
1274
- "value": "{color-dark-info-040}",
1275
- "type": "color"
1276
- },
1277
- "color-info-050": {
1278
- "value": "{color-dark-info-050}",
1279
- "type": "color"
1280
- },
1281
- "color-info-060": {
1282
- "value": "{color-dark-info-060}",
1283
- "type": "color"
1284
- },
1285
- "color-info-070": {
1286
- "value": "{color-dark-info-070}",
1287
- "type": "color"
1288
- },
1289
- "color-info-080": {
1290
- "value": "{color-dark-info-080}",
1291
- "type": "color"
1292
- },
1293
- "color-info-090": {
1294
- "value": "{color-dark-info-090}",
1295
- "type": "color"
1296
- },
1297
- "color-success-005": {
1298
- "value": "{color-dark-success-005}",
1299
- "type": "color"
1300
- },
1301
- "color-success-010": {
1302
- "value": "{color-dark-success-010}",
1303
- "type": "color"
1304
- },
1305
- "color-success-020": {
1306
- "value": "{color-dark-success-020}",
1307
- "type": "color"
1308
- },
1309
- "color-success-030": {
1310
- "value": "{color-dark-success-030}",
1311
- "type": "color"
1312
- },
1313
- "color-success-040": {
1314
- "value": "{color-dark-success-040}",
1315
- "type": "color"
1316
- },
1317
- "color-success-050": {
1318
- "value": "{color-dark-success-050}",
1319
- "type": "color"
1320
- },
1321
- "color-success-060": {
1322
- "value": "{color-dark-success-060}",
1323
- "type": "color"
1324
- },
1325
- "color-success-070": {
1326
- "value": "{color-dark-success-070}",
1327
- "type": "color"
1328
- },
1329
- "color-success-080": {
1330
- "value": "{color-dark-success-080}",
1331
- "type": "color"
1332
- },
1333
- "color-success-090": {
1334
- "value": "{color-dark-success-090}",
1335
- "type": "color"
1336
- },
1337
- "color-warning-005": {
1338
- "value": "{color-dark-warning-005}",
1339
- "type": "color"
1340
- },
1341
- "color-warning-010": {
1342
- "value": "{color-dark-warning-010}",
1343
- "type": "color"
1344
- },
1345
- "color-warning-020": {
1346
- "value": "{color-dark-warning-020}",
1347
- "type": "color"
1348
- },
1349
- "color-warning-030": {
1350
- "value": "{color-dark-warning-030}",
1351
- "type": "color"
1352
- },
1353
- "color-warning-040": {
1354
- "value": "{color-dark-warning-040}",
1355
- "type": "color"
1356
- },
1357
- "color-warning-050": {
1358
- "value": "{color-dark-warning-050}",
1359
- "type": "color"
1360
- },
1361
- "color-warning-060": {
1362
- "value": "{color-dark-warning-060}",
1363
- "type": "color"
1364
- },
1365
- "color-warning-070": {
1366
- "value": "{color-dark-warning-070}",
1367
- "type": "color"
1368
- },
1369
- "color-warning-080": {
1370
- "value": "{color-dark-warning-080}",
1371
- "type": "color"
1372
- },
1373
- "color-warning-090": {
1374
- "value": "{color-dark-warning-090}",
1375
- "type": "color"
1376
- },
1377
- "color-error-005": {
1378
- "value": "{color-dark-error-005}",
1379
- "type": "color"
1380
- },
1381
- "color-error-010": {
1382
- "value": "{color-dark-error-010}",
1383
- "type": "color"
1384
- },
1385
- "color-error-020": {
1386
- "value": "{color-dark-error-020}",
1387
- "type": "color"
1388
- },
1389
- "color-error-030": {
1390
- "value": "{color-dark-error-030}",
1391
- "type": "color"
1392
- },
1393
- "color-error-040": {
1394
- "value": "{color-dark-error-040}",
1395
- "type": "color"
1396
- },
1397
- "color-error-050": {
1398
- "value": "{color-dark-error-050}",
1399
- "type": "color"
1400
- },
1401
- "color-error-060": {
1402
- "value": "{color-dark-error-060}",
1403
- "type": "color"
1404
- },
1405
- "color-error-070": {
1406
- "value": "{color-dark-error-070}",
1407
- "type": "color"
1408
- },
1409
- "color-error-080": {
1410
- "value": "{color-dark-error-080}",
1411
- "type": "color"
1412
- },
1413
- "color-error-090": {
1414
- "value": "{color-dark-error-090}",
1415
- "type": "color"
1416
- },
1417
- "color-secondary-1": {
1418
- "value": "{color-dark-secondary-1}",
1419
- "type": "color"
1420
- },
1421
- "color-secondary-1-opacity-005": {
1422
- "value": "{color-dark-secondary-1-opacity-005}",
1423
- "type": "color"
1424
- },
1425
- "color-secondary-1-opacity-010": {
1426
- "value": "{color-dark-secondary-1-opacity-010}",
1427
- "type": "color"
1428
- },
1429
- "color-secondary-1-opacity-020": {
1430
- "value": "{color-dark-secondary-1-opacity-020}",
1431
- "type": "color"
1432
- },
1433
- "color-secondary-1-opacity-030": {
1434
- "value": "{color-dark-secondary-1-opacity-030}",
1435
- "type": "color"
1436
- },
1437
- "color-secondary-2": {
1438
- "value": "{color-dark-secondary-2}",
1439
- "type": "color"
1440
- },
1441
- "color-secondary-2-opacity-005": {
1442
- "value": "{color-dark-secondary-2-opacity-005}",
1443
- "type": "color"
1444
- },
1445
- "color-secondary-2-opacity-010": {
1446
- "value": "{color-dark-secondary-2-opacity-010}",
1447
- "type": "color"
1448
- },
1449
- "color-secondary-2-opacity-020": {
1450
- "value": "{color-dark-secondary-2-opacity-020}",
1451
- "type": "color"
1452
- },
1453
- "color-secondary-2-opacity-030": {
1454
- "value": "{color-dark-secondary-2-opacity-030}",
1455
- "type": "color"
1456
- },
1457
- "color-secondary-3": {
1458
- "value": "{color-dark-secondary-3}",
1459
- "type": "color"
1460
- },
1461
- "color-secondary-3-opacity-005": {
1462
- "value": "{color-dark-secondary-3-opacity-005}",
1463
- "type": "color"
1464
- },
1465
- "color-secondary-3-opacity-010": {
1466
- "value": "{color-dark-secondary-3-opacity-010}",
1467
- "type": "color"
1468
- },
1469
- "color-secondary-3-opacity-020": {
1470
- "value": "{color-dark-secondary-3-opacity-020}",
1471
- "type": "color"
1472
- },
1473
- "color-secondary-3-opacity-030": {
1474
- "value": "{color-dark-secondary-3-opacity-030}",
1475
- "type": "color"
1476
- },
1477
- "color-secondary-4": {
1478
- "value": "{color-dark-secondary-4}",
1479
- "type": "color"
1480
- },
1481
- "color-secondary-4-opacity-005": {
1482
- "value": "{color-dark-secondary-4-opacity-005}",
1483
- "type": "color"
1484
- },
1485
- "color-secondary-4-opacity-010": {
1486
- "value": "{color-dark-secondary-4-opacity-010}",
1487
- "type": "color"
1488
- },
1489
- "color-secondary-4-opacity-020": {
1490
- "value": "{color-dark-secondary-4-opacity-020}",
1491
- "type": "color"
1492
- },
1493
- "color-secondary-4-opacity-030": {
1494
- "value": "{color-dark-secondary-4-opacity-030}",
1495
- "type": "color"
1496
- },
1497
- "color-divider-005": {
1498
- "value": "{color-dark-divider-005}",
1499
- "type": "color"
1500
- },
1501
- "color-divider-010": {
1502
- "value": "{color-dark-divider-010}",
1503
- "type": "color"
1504
- },
1505
- "color-divider-020": {
1506
- "value": "{color-dark-divider-020}",
1507
- "type": "color"
1508
- },
1509
- "color-divider-030": {
1510
- "value": "{color-dark-divider-030}",
385
+ "color-extra-1": {
386
+ "value": "{color-dark-extra-1}",
387
"type": "color"
388
},
1513
- "color-hover-005": {
1514
- "value": "{color-dark-hover-005}",
389
+ "color-extra-2": {
390
+ "value": "{color-dark-extra-2}",
391
"type": "color"
392
},
1517
- "color-hover-010": {
1518
- "value": "{color-dark-hover-010}",
393
+ "color-extra-3": {
394
+ "value": "{color-dark-extra-3}",
395
"type": "color"
396
},
1521
- "color-hover-050": {
1522
- "value": "{color-dark-hover-050}",
397
+ "color-extra-4": {
398
+ "value": "{color-dark-extra-4}",
399
"type": "color"
400
}
401
}
frontend/package-lock.json
+707
-566
@@ -13,9 +13,9 @@
13
"@fontsource/jetbrains-mono": "^5.1.2",
14
"@fontsource/lexend": "^5.1.2",
15
"@fontsource/public-sans": "^5.1.2",
16
- "@shikijs/markdown-it": "^1.26.1",
16
+ "@shikijs/markdown-it": "^1.27.2",
17
"@tailwindcss/container-queries": "^0.1.1",
18
- "@vueuse/core": "^12.3.0",
18
+ "@vueuse/core": "^12.4.0",
19
"axios": "^1.7.9",
20
"bytes": "^3.1.2",
21
"colord": "^2.9.3",
@@ -34,7 +34,7 @@
34
"pinia": "^2.3.0",
35
"pinia-plugin-persistedstate": "^4.2.0",
36
"secure-ls": "^2.0.0",
37
- "shiki": "^1.26.1",
37
+ "shiki": "^1.27.2",
38
"validator": "^13.12.0",
39
"vue": "^3.5.13",
40
"vue-advanced-cropper": "^2.8.9",
@@ -47,8 +47,8 @@
47
"vuedraggable": "^4.1.0"
48
},
49
"devDependencies": {
50
- "@antfu/eslint-config": "^3.12.1",
51
- "@clack/prompts": "^0.9.0",
50
+ "@antfu/eslint-config": "^3.14.0",
51
+ "@clack/prompts": "^0.9.1",
52
"@iconify/vue": "^4.3.0",
53
"@tsconfig/node20": "^20.1.4",
54
"@types/bytes": "^3.1.5",
@@ -56,7 +56,7 @@
56
"@types/fs-extra": "^11.0.4",
57
"@types/jsdom": "^21.1.7",
58
"@types/lodash": "^4.17.14",
59
- "@types/node": "^22.10.5",
59
+ "@types/node": "^22.10.6",
60
"@types/validator": "^13.12.2",
61
"@vitejs/plugin-vue": "^5.2.1",
62
"@vitejs/plugin-vue-jsx": "^4.1.1",
@@ -65,25 +65,24 @@
65
"autoprefixer": "^10.4.20",
66
"cypress": "^13.17.0",
67
"depcheck": "^1.4.7",
68
- "eslint": "^9.17.0",
68
+ "eslint": "^9.18.0",
69
"flourite": "^1.3.0",
70
"fs-extra": "^11.2.0",
71
- "jsdom": "^25.0.1",
71
+ "jsdom": "^26.0.0",
72
"npm-run-all2": "^7.0.2",
73
- "postcss": "^8.4.49",
73
+ "postcss": "^8.5.1",
74
"prettier": "^3.4.2",
75
"prettier-plugin-tailwindcss": "^0.6.9",
76
- "sass": "^1.83.1",
77
- "start-server-and-test": "^2.0.9",
76
+ "sass": "^1.83.4",
77
+ "start-server-and-test": "^2.0.10",
78
"tailwind-config-viewer": "^2.0.4",
79
"tailwindcss": "^3.4.17",
80
- "taze": "^0.18.0",
81
- "type-fest": "^4.31.0",
82
- "typescript": "~5.7.2",
83
- "unplugin-vue-components": "^0.28.0",
80
+ "taze": "^18.2.0",
81
+ "type-fest": "^4.32.0",
82
+ "typescript": "~5.7.3",
83
"vite": "^6.0.7",
84
"vite-bundle-visualizer": "^1.2.1",
86
- "vite-plugin-vue-devtools": "^7.6.8",
85
+ "vite-plugin-vue-devtools": "^7.7.0",
86
"vite-svg-loader": "^5.1.0",
87
"vitest": "^2.1.8",
88
"vue-tsc": "^2.2.0"
@@ -92,7 +91,9 @@
91
"node": ">=18.0.0"
92
},
93
"optionalDependencies": {
95
- "@rollup/rollup-linux-x64-gnu": "^4.30.0"
94
+ "@rollup/rollup-linux-x64-gnu": "^4.30.1",
95
+ "treemate": "^0.3.11",
96
+ "vueuc": "^0.4.64"
97
}
98
},
99
"node_modules/@ajoelp/json-to-formdata": {
@@ -130,41 +131,41 @@
131
}
132
},
133
"node_modules/@antfu/eslint-config": {
133
- "version": "3.12.1",
134
- "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-3.12.1.tgz",
135
- "integrity": "sha512-6sRgO4u63GK75xeZ2MfCSRT9GcfLti4ZN3Xw+bIu39oo6HY50fBY+rXnWvgwNimzHBOh3yV5xUHfTqcHq1M5AA==",
134
+ "version": "3.14.0",
135
+ "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-3.14.0.tgz",
136
+ "integrity": "sha512-SBQOFrF/d2aqsVhxcHZ6g5DAoUaNyaV3Vd+lGNJx4CfSuwk9EuC8sRUF819GkNdCMbH5wNdFoJ4+Tsd9sr/NBw==",
137
"dev": true,
138
"license": "MIT",
139
"dependencies": {
139
- "@antfu/install-pkg": "^0.5.0",
140
- "@clack/prompts": "^0.9.0",
140
+ "@antfu/install-pkg": "^1.0.0",
141
+ "@clack/prompts": "^0.9.1",
142
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
143
"@eslint/markdown": "^6.2.1",
143
- "@stylistic/eslint-plugin": "^2.12.1",
144
- "@typescript-eslint/eslint-plugin": "^8.18.2",
145
- "@typescript-eslint/parser": "^8.18.2",
146
- "@vitest/eslint-plugin": "^1.1.20",
147
- "eslint-config-flat-gitignore": "^0.3.0",
148
- "eslint-flat-config-utils": "^0.4.0",
149
- "eslint-merge-processors": "^0.1.0",
144
+ "@stylistic/eslint-plugin": "^2.13.0",
145
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
146
+ "@typescript-eslint/parser": "^8.19.1",
147
+ "@vitest/eslint-plugin": "^1.1.25",
148
+ "eslint-config-flat-gitignore": "^1.0.0",
149
+ "eslint-flat-config-utils": "^1.0.0",
150
+ "eslint-merge-processors": "^1.0.0",
151
"eslint-plugin-antfu": "^2.7.0",
151
- "eslint-plugin-command": "^0.2.7",
152
+ "eslint-plugin-command": "^2.1.0",
153
"eslint-plugin-import-x": "^4.6.1",
154
"eslint-plugin-jsdoc": "^50.6.1",
155
"eslint-plugin-jsonc": "^2.18.2",
156
"eslint-plugin-n": "^17.15.1",
157
"eslint-plugin-no-only-tests": "^3.3.0",
157
- "eslint-plugin-perfectionist": "^4.4.0",
158
+ "eslint-plugin-perfectionist": "^4.6.0",
159
"eslint-plugin-regexp": "^2.7.0",
160
"eslint-plugin-toml": "^0.12.0",
161
"eslint-plugin-unicorn": "^56.0.1",
162
"eslint-plugin-unused-imports": "^4.1.4",
163
"eslint-plugin-vue": "^9.32.0",
164
"eslint-plugin-yml": "^1.16.0",
164
- "eslint-processor-vue-blocks": "^0.1.2",
165
+ "eslint-processor-vue-blocks": "^1.0.0",
166
"globals": "^15.14.0",
167
"jsonc-eslint-parser": "^2.4.0",
167
- "local-pkg": "^0.5.1",
168
+ "local-pkg": "^1.0.0",
169
"parse-gitignore": "^2.0.0",
170
"picocolors": "^1.1.1",
171
"toml-eslint-parser": "^0.10.0",
@@ -237,23 +238,23 @@
238
}
239
},
240
"node_modules/@antfu/install-pkg": {
240
- "version": "0.5.0",
241
- "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.5.0.tgz",
242
- "integrity": "sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==",
241
+ "version": "1.0.0",
242
+ "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz",
243
+ "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==",
244
"dev": true,
245
"license": "MIT",
246
"dependencies": {
246
- "package-manager-detector": "^0.2.5",
247
- "tinyexec": "^0.3.1"
247
+ "package-manager-detector": "^0.2.8",
248
+ "tinyexec": "^0.3.2"
249
},
250
"funding": {
251
"url": "https://github.com/sponsors/antfu"
252
}
253
},
254
"node_modules/@antfu/ni": {
254
- "version": "0.23.2",
255
- "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-0.23.2.tgz",
256
- "integrity": "sha512-FSEVWXvwroExDXUu8qV6Wqp2X3D1nJ0Li4LFymCyvCVrm7I3lNfG0zZWSWvGU1RE7891eTnFTyh31L3igOwNKQ==",
255
+ "version": "23.2.0",
256
+ "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-23.2.0.tgz",
257
+ "integrity": "sha512-PsqWG9QcgTQ0eyEMxYaaJMxoCaCmy8InPkToC7MQuOHHUPQknMZtCrnzZSZDXk+X9Z93eGFh+v0mE2X6FWNtuw==",
258
"dev": true,
259
"license": "MIT",
260
"bin": {
@@ -276,6 +277,27 @@
277
"url": "https://github.com/sponsors/antfu"
278
}
279
},
280
+ "node_modules/@asamuzakjp/css-color": {
281
+ "version": "2.8.3",
282
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz",
283
+ "integrity": "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==",
284
+ "dev": true,
285
+ "license": "MIT",
286
+ "dependencies": {
287
+ "@csstools/css-calc": "^2.1.1",
288
+ "@csstools/css-color-parser": "^3.0.7",
289
+ "@csstools/css-parser-algorithms": "^3.0.4",
290
+ "@csstools/css-tokenizer": "^3.0.3",
291
+ "lru-cache": "^10.4.3"
292
+ }
293
+ },
294
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
295
+ "version": "10.4.3",
296
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
297
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
298
+ "dev": true,
299
+ "license": "ISC"
300
+ },
301
"node_modules/@babel/code-frame": {
302
"version": "7.26.2",
303
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
@@ -291,9 +313,9 @@
313
}
314
},
315
"node_modules/@babel/compat-data": {
294
- "version": "7.26.3",
295
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz",
296
- "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
316
+ "version": "7.26.5",
317
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
318
+ "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
319
"license": "MIT",
320
"engines": {
321
"node": ">=6.9.0"
@@ -339,13 +361,13 @@
361
}
362
},
363
"node_modules/@babel/generator": {
342
- "version": "7.26.3",
343
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
344
- "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
364
+ "version": "7.26.5",
365
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
366
+ "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
367
"license": "MIT",
368
"dependencies": {
347
- "@babel/parser": "^7.26.3",
348
- "@babel/types": "^7.26.3",
369
+ "@babel/parser": "^7.26.5",
370
+ "@babel/types": "^7.26.5",
371
"@jridgewell/gen-mapping": "^0.3.5",
372
"@jridgewell/trace-mapping": "^0.3.25",
373
"jsesc": "^3.0.2"
@@ -368,12 +390,12 @@
390
}
391
},
392
"node_modules/@babel/helper-compilation-targets": {
371
- "version": "7.25.9",
372
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
373
- "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
393
+ "version": "7.26.5",
394
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
395
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
396
"license": "MIT",
397
"dependencies": {
376
- "@babel/compat-data": "^7.25.9",
398
+ "@babel/compat-data": "^7.26.5",
399
"@babel/helper-validator-option": "^7.25.9",
400
"browserslist": "^4.24.0",
401
"lru-cache": "^5.1.1",
@@ -482,9 +504,9 @@
504
}
505
},
506
"node_modules/@babel/helper-plugin-utils": {
485
- "version": "7.25.9",
486
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
487
- "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
507
+ "version": "7.26.5",
508
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
509
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
510
"dev": true,
511
"license": "MIT",
512
"engines": {
@@ -492,15 +514,15 @@
514
}
515
},
516
"node_modules/@babel/helper-replace-supers": {
495
- "version": "7.25.9",
496
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
497
- "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
517
+ "version": "7.26.5",
518
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
519
+ "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
520
"dev": true,
521
"license": "MIT",
522
"dependencies": {
523
"@babel/helper-member-expression-to-functions": "^7.25.9",
524
"@babel/helper-optimise-call-expression": "^7.25.9",
503
- "@babel/traverse": "^7.25.9"
525
+ "@babel/traverse": "^7.26.5"
526
},
527
"engines": {
528
"node": ">=6.9.0"
@@ -564,12 +586,12 @@
586
}
587
},
588
"node_modules/@babel/parser": {
567
- "version": "7.26.3",
568
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
569
- "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
589
+ "version": "7.26.5",
590
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
591
+ "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
592
"license": "MIT",
593
"dependencies": {
572
- "@babel/types": "^7.26.3"
594
+ "@babel/types": "^7.26.5"
595
},
596
"bin": {
597
"parser": "bin/babel-parser.js"
@@ -674,15 +696,15 @@
696
}
697
},
698
"node_modules/@babel/plugin-transform-typescript": {
677
- "version": "7.26.3",
678
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz",
679
- "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==",
699
+ "version": "7.26.5",
700
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz",
701
+ "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==",
702
"dev": true,
703
"license": "MIT",
704
"dependencies": {
705
"@babel/helper-annotate-as-pure": "^7.25.9",
706
"@babel/helper-create-class-features-plugin": "^7.25.9",
685
- "@babel/helper-plugin-utils": "^7.25.9",
707
+ "@babel/helper-plugin-utils": "^7.26.5",
708
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
709
"@babel/plugin-syntax-typescript": "^7.25.9"
710
},
@@ -694,9 +716,9 @@
716
}
717
},
718
"node_modules/@babel/standalone": {
697
- "version": "7.26.4",
698
- "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.4.tgz",
699
- "integrity": "sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==",
719
+ "version": "7.26.6",
720
+ "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.6.tgz",
721
+ "integrity": "sha512-h1mkoNFYCqDkS+vTLGzsQYvp1v1qbuugk4lOtb/oyjArZ+EtreAaxcSYg3rSIzWZRQOjx4iqGe7A8NRYIMSTTw==",
722
"license": "MIT",
723
"engines": {
724
"node": ">=6.9.0"
@@ -717,16 +739,16 @@
739
}
740
},
741
"node_modules/@babel/traverse": {
720
- "version": "7.26.4",
721
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
722
- "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
742
+ "version": "7.26.5",
743
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
744
+ "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
745
"license": "MIT",
746
"dependencies": {
747
"@babel/code-frame": "^7.26.2",
726
- "@babel/generator": "^7.26.3",
727
- "@babel/parser": "^7.26.3",
748
+ "@babel/generator": "^7.26.5",
749
+ "@babel/parser": "^7.26.5",
750
"@babel/template": "^7.25.9",
729
- "@babel/types": "^7.26.3",
751
+ "@babel/types": "^7.26.5",
752
"debug": "^4.3.1",
753
"globals": "^11.1.0"
754
},
@@ -744,9 +766,9 @@
766
}
767
},
768
"node_modules/@babel/types": {
747
- "version": "7.26.3",
748
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
749
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
769
+ "version": "7.26.5",
770
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
771
+ "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
772
"license": "MIT",
773
"dependencies": {
774
"@babel/helper-string-parser": "^7.25.9",
@@ -757,9 +779,9 @@
779
}
780
},
781
"node_modules/@clack/core": {
760
- "version": "0.4.0",
761
- "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.0.tgz",
762
- "integrity": "sha512-YJCYBsyJfNDaTbvDUVSJ3SgSuPrcujarRgkJ5NLjexDZKvaOiVVJvAQYx8lIgG0qRT8ff0fPgqyBCVivanIZ+A==",
782
+ "version": "0.4.1",
783
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz",
784
+ "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==",
785
"dev": true,
786
"license": "MIT",
787
"dependencies": {
@@ -768,13 +790,13 @@
790
}
791
},
792
"node_modules/@clack/prompts": {
771
- "version": "0.9.0",
772
- "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.9.0.tgz",
773
- "integrity": "sha512-nGsytiExgUr4FL0pR/LeqxA28nz3E0cW7eLTSh3Iod9TGrbBt8Y7BHbV3mmkNC4G0evdYyQ3ZsbiBkk7ektArA==",
793
+ "version": "0.9.1",
794
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.9.1.tgz",
795
+ "integrity": "sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==",
796
"dev": true,
797
"license": "MIT",
798
"dependencies": {
777
- "@clack/core": "0.4.0",
799
+ "@clack/core": "0.4.1",
800
"picocolors": "^1.0.0",
801
"sisteransi": "^1.0.5"
802
}
@@ -808,6 +830,121 @@
830
"vue": "^3.0.11"
831
}
832
},
833
+ "node_modules/@csstools/color-helpers": {
834
+ "version": "5.0.1",
835
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz",
836
+ "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==",
837
+ "dev": true,
838
+ "funding": [
839
+ {
840
+ "type": "github",
841
+ "url": "https://github.com/sponsors/csstools"
842
+ },
843
+ {
844
+ "type": "opencollective",
845
+ "url": "https://opencollective.com/csstools"
846
+ }
847
+ ],
848
+ "license": "MIT-0",
849
+ "engines": {
850
+ "node": ">=18"
851
+ }
852
+ },
853
+ "node_modules/@csstools/css-calc": {
854
+ "version": "2.1.1",
855
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz",
856
+ "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==",
857
+ "dev": true,
858
+ "funding": [
859
+ {
860
+ "type": "github",
861
+ "url": "https://github.com/sponsors/csstools"
862
+ },
863
+ {
864
+ "type": "opencollective",
865
+ "url": "https://opencollective.com/csstools"
866
+ }
867
+ ],
868
+ "license": "MIT",
869
+ "engines": {
870
+ "node": ">=18"
871
+ },
872
+ "peerDependencies": {
873
+ "@csstools/css-parser-algorithms": "^3.0.4",
874
+ "@csstools/css-tokenizer": "^3.0.3"
875
+ }
876
+ },
877
+ "node_modules/@csstools/css-color-parser": {
878
+ "version": "3.0.7",
879
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz",
880
+ "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==",
881
+ "dev": true,
882
+ "funding": [
883
+ {
884
+ "type": "github",
885
+ "url": "https://github.com/sponsors/csstools"
886
+ },
887
+ {
888
+ "type": "opencollective",
889
+ "url": "https://opencollective.com/csstools"
890
+ }
891
+ ],
892
+ "license": "MIT",
893
+ "dependencies": {
894
+ "@csstools/color-helpers": "^5.0.1",
895
+ "@csstools/css-calc": "^2.1.1"
896
+ },
897
+ "engines": {
898
+ "node": ">=18"
899
+ },
900
+ "peerDependencies": {
901
+ "@csstools/css-parser-algorithms": "^3.0.4",
902
+ "@csstools/css-tokenizer": "^3.0.3"
903
+ }
904
+ },
905
+ "node_modules/@csstools/css-parser-algorithms": {
906
+ "version": "3.0.4",
907
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
908
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
909
+ "dev": true,
910
+ "funding": [
911
+ {
912
+ "type": "github",
913
+ "url": "https://github.com/sponsors/csstools"
914
+ },
915
+ {
916
+ "type": "opencollective",
917
+ "url": "https://opencollective.com/csstools"
918
+ }
919
+ ],
920
+ "license": "MIT",
921
+ "engines": {
922
+ "node": ">=18"
923
+ },
924
+ "peerDependencies": {
925
+ "@csstools/css-tokenizer": "^3.0.3"
926
+ }
927
+ },
928
+ "node_modules/@csstools/css-tokenizer": {
929
+ "version": "3.0.3",
930
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
931
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
932
+ "dev": true,
933
+ "funding": [
934
+ {
935
+ "type": "github",
936
+ "url": "https://github.com/sponsors/csstools"
937
+ },
938
+ {
939
+ "type": "opencollective",
940
+ "url": "https://opencollective.com/csstools"
941
+ }
942
+ ],
943
+ "license": "MIT",
944
+ "engines": {
945
+ "node": ">=18"
946
+ }
947
+ },
948
"node_modules/@cypress/request": {
949
"version": "3.0.7",
950
"resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz",
@@ -866,18 +1003,21 @@
1003
"license": "MIT"
1004
},
1005
"node_modules/@es-joy/jsdoccomment": {
869
- "version": "0.49.0",
870
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
871
- "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
1006
+ "version": "0.50.0",
1007
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.50.0.tgz",
1008
+ "integrity": "sha512-+zZymuVLH6zVwXPtCAtC+bDymxmEwEqDftdAK+f407IF1bnX49anIxvBhCA1AqUIfD6egj1jM1vUnSuijjNyYg==",
1009
"dev": true,
1010
"license": "MIT",
1011
"dependencies": {
1012
+ "@types/eslint": "^9.6.1",
1013
+ "@types/estree": "^1.0.6",
1014
+ "@typescript-eslint/types": "^8.11.0",
1015
"comment-parser": "1.4.1",
1016
"esquery": "^1.6.0",
1017
"jsdoc-type-pratt-parser": "~4.1.0"
1018
},
1019
"engines": {
880
- "node": ">=16"
1020
+ "node": ">=18"
1021
}
1022
},
1023
"node_modules/@esbuild/aix-ppc64": {
@@ -1368,9 +1508,9 @@
1508
}
1509
},
1510
"node_modules/@eslint/compat": {
1371
- "version": "1.2.4",
1372
- "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.4.tgz",
1373
- "integrity": "sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==",
1511
+ "version": "1.2.5",
1512
+ "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.5.tgz",
1513
+ "integrity": "sha512-5iuG/StT+7OfvhoBHPlmxkPA9om6aDUFgmD4+mWKAGsYt4vCe8rypneG03AuseyRHBmcCLXQtIH5S26tIoggLg==",
1514
"dev": true,
1515
"license": "Apache-2.0",
1516
"engines": {
@@ -1425,9 +1565,9 @@
1565
}
1566
},
1567
"node_modules/@eslint/core": {
1428
- "version": "0.9.1",
1429
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz",
1430
- "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==",
1568
+ "version": "0.10.0",
1569
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz",
1570
+ "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==",
1571
"dev": true,
1572
"license": "Apache-2.0",
1573
"dependencies": {
@@ -1519,9 +1659,9 @@
1659
}
1660
},
1661
"node_modules/@eslint/js": {
1522
- "version": "9.17.0",
1523
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz",
1524
- "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==",
1662
+ "version": "9.18.0",
1663
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz",
1664
+ "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==",
1665
"dev": true,
1666
"license": "MIT",
1667
"engines": {
@@ -1555,12 +1695,13 @@
1695
}
1696
},
1697
"node_modules/@eslint/plugin-kit": {
1558
- "version": "0.2.4",
1559
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz",
1560
- "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==",
1698
+ "version": "0.2.5",
1699
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz",
1700
+ "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==",
1701
"dev": true,
1702
"license": "Apache-2.0",
1703
"dependencies": {
1704
+ "@eslint/core": "^0.10.0",
1705
"levn": "^0.4.1"
1706
},
1707
"engines": {
@@ -1921,72 +2062,61 @@
2062
}
2063
},
2064
"node_modules/@nuxt/kit": {
1924
- "version": "3.15.1",
1925
- "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.15.1.tgz",
1926
- "integrity": "sha512-7cVWjzfz3L6CsZrg6ppDZa7zGrZxCSfZjEQDIvVFn4mFKtJlK9k2izf5EewL6luzWwIQojkZAC3iq/1wtgI0Xw==",
2065
+ "version": "3.15.2",
2066
+ "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.15.2.tgz",
2067
+ "integrity": "sha512-nxiPJVz2fICcyBKlN5pL1IgZVejyArulREsS5HvAk07hijlYuZ5toRM8soLt51VQNpFd/PedL+Z1AlYu/bQCYQ==",
2068
"license": "MIT",
2069
"dependencies": {
1929
- "@nuxt/schema": "3.15.1",
2070
+ "@nuxt/schema": "3.15.2",
2071
"c12": "^2.0.1",
1931
- "consola": "^3.3.3",
2072
+ "consola": "^3.4.0",
2073
"defu": "^6.1.4",
2074
"destr": "^2.0.3",
2075
"globby": "^14.0.2",
1935
- "ignore": "^7.0.0",
2076
+ "ignore": "^7.0.3",
2077
"jiti": "^2.4.2",
2078
"klona": "^2.0.6",
2079
"knitwork": "^1.2.0",
1939
- "mlly": "^1.7.3",
2080
+ "mlly": "^1.7.4",
2081
"ohash": "^1.1.4",
1941
- "pathe": "^2.0.0",
1942
- "pkg-types": "^1.3.0",
2082
+ "pathe": "^2.0.1",
2083
+ "pkg-types": "^1.3.1",
2084
"scule": "^1.3.0",
2085
"semver": "^7.6.3",
2086
+ "std-env": "^3.8.0",
2087
"ufo": "^1.5.4",
2088
"unctx": "^2.4.1",
1947
- "unimport": "^3.14.5",
2089
+ "unimport": "^3.14.6",
2090
"untyped": "^1.5.2"
2091
},
2092
"engines": {
1951
- "node": ">=18.20.5"
2093
+ "node": ">=18.0.0"
2094
}
2095
},
2096
"node_modules/@nuxt/kit/node_modules/ignore": {
1955
- "version": "7.0.0",
1956
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.0.tgz",
1957
- "integrity": "sha512-lcX8PNQygAa22u/0BysEY8VhaFRzlOkvdlKczDPnJvrkJD1EuqzEky5VYYKM2iySIuaVIDv9N190DfSreSLw2A==",
2097
+ "version": "7.0.3",
2098
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz",
2099
+ "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==",
2100
"license": "MIT",
2101
"engines": {
2102
"node": ">= 4"
2103
}
2104
},
1963
- "node_modules/@nuxt/kit/node_modules/pathe": {
1964
- "version": "2.0.0",
1965
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.0.tgz",
1966
- "integrity": "sha512-G7n4uhtk9qJt2hlD+UFfsIGY854wpF+zs2bUbQ3CQEUTcn7v25LRsrmurOxTo4bJgjE4qkyshd9ldsEuY9M6xg==",
1967
- "license": "MIT"
1968
- },
2105
"node_modules/@nuxt/schema": {
1970
- "version": "3.15.1",
1971
- "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.15.1.tgz",
1972
- "integrity": "sha512-n5kOHt8uUyUM9z4Wu/8tIZkBYh3KTCGvyruG6oD9bfeT4OaS21+X3M7XsTXFMe+eYBZA70IFFlWn1JJZIPsKeA==",
2106
+ "version": "3.15.2",
2107
+ "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.15.2.tgz",
2108
+ "integrity": "sha512-cTHGbLTbrQ83B+7Mh0ggc5MzIp74o8KciA0boCiBJyK5uImH9QQNK6VgfwRWcTD5sj3WNKiIB1luOMom3LHgVw==",
2109
"license": "MIT",
2110
"dependencies": {
1975
- "consola": "^3.3.3",
2111
+ "consola": "^3.4.0",
2112
"defu": "^6.1.4",
1977
- "pathe": "^2.0.0",
2113
+ "pathe": "^2.0.1",
2114
"std-env": "^3.8.0"
2115
},
2116
"engines": {
2117
"node": "^14.18.0 || >=16.10.0"
2118
}
2119
},
1984
- "node_modules/@nuxt/schema/node_modules/pathe": {
1985
- "version": "2.0.0",
1986
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.0.tgz",
1987
- "integrity": "sha512-G7n4uhtk9qJt2hlD+UFfsIGY854wpF+zs2bUbQ3CQEUTcn7v25LRsrmurOxTo4bJgjE4qkyshd9ldsEuY9M6xg==",
1988
- "license": "MIT"
1989
- },
2120
"node_modules/@one-ini/wasm": {
2121
"version": "0.1.1",
2122
"resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
@@ -2357,9 +2487,9 @@
2487
}
2488
},
2489
"node_modules/@rollup/rollup-android-arm-eabi": {
2360
- "version": "4.30.0",
2361
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.0.tgz",
2362
- "integrity": "sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==",
2490
+ "version": "4.30.1",
2491
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz",
2492
+ "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==",
2493
"cpu": [
2494
"arm"
2495
],
@@ -2371,9 +2501,9 @@
2501
]
2502
},
2503
"node_modules/@rollup/rollup-android-arm64": {
2374
- "version": "4.30.0",
2375
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.0.tgz",
2376
- "integrity": "sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==",
2504
+ "version": "4.30.1",
2505
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz",
2506
+ "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==",
2507
"cpu": [
2508
"arm64"
2509
],
@@ -2385,9 +2515,9 @@
2515
]
2516
},
2517
"node_modules/@rollup/rollup-darwin-arm64": {
2388
- "version": "4.30.0",
2389
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.0.tgz",
2390
- "integrity": "sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==",
2518
+ "version": "4.30.1",
2519
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz",
2520
+ "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==",
2521
"cpu": [
2522
"arm64"
2523
],
@@ -2399,9 +2529,9 @@
2529
]
2530
},
2531
"node_modules/@rollup/rollup-darwin-x64": {
2402
- "version": "4.30.0",
2403
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.0.tgz",
2404
- "integrity": "sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==",
2532
+ "version": "4.30.1",
2533
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz",
2534
+ "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==",
2535
"cpu": [
2536
"x64"
2537
],
@@ -2413,9 +2543,9 @@
2543
]
2544
},
2545
"node_modules/@rollup/rollup-freebsd-arm64": {
2416
- "version": "4.30.0",
2417
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.0.tgz",
2418
- "integrity": "sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==",
2546
+ "version": "4.30.1",
2547
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz",
2548
+ "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==",
2549
"cpu": [
2550
"arm64"
2551
],
@@ -2427,9 +2557,9 @@
2557
]
2558
},
2559
"node_modules/@rollup/rollup-freebsd-x64": {
2430
- "version": "4.30.0",
2431
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.0.tgz",
2432
- "integrity": "sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==",
2560
+ "version": "4.30.1",
2561
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz",
2562
+ "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==",
2563
"cpu": [
2564
"x64"
2565
],
@@ -2441,9 +2571,9 @@
2571
]
2572
},
2573
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
2444
- "version": "4.30.0",
2445
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.0.tgz",
2446
- "integrity": "sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==",
2574
+ "version": "4.30.1",
2575
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz",
2576
+ "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==",
2577
"cpu": [
2578
"arm"
2579
],
@@ -2455,9 +2585,9 @@
2585
]
2586
},
2587
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
2458
- "version": "4.30.0",
2459
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.0.tgz",
2460
- "integrity": "sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==",
2588
+ "version": "4.30.1",
2589
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz",
2590
+ "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==",
2591
"cpu": [
2592
"arm"
2593
],
@@ -2469,9 +2599,9 @@
2599
]
2600
},
2601
"node_modules/@rollup/rollup-linux-arm64-gnu": {
2472
- "version": "4.30.0",
2473
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.0.tgz",
2474
- "integrity": "sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==",
2602
+ "version": "4.30.1",
2603
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz",
2604
+ "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==",
2605
"cpu": [
2606
"arm64"
2607
],
@@ -2483,9 +2613,9 @@
2613
]
2614
},
2615
"node_modules/@rollup/rollup-linux-arm64-musl": {
2486
- "version": "4.30.0",
2487
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.0.tgz",
2488
- "integrity": "sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==",
2616
+ "version": "4.30.1",
2617
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz",
2618
+ "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==",
2619
"cpu": [
2620
"arm64"
2621
],
@@ -2497,9 +2627,9 @@
2627
]
2628
},
2629
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
2500
- "version": "4.30.0",
2501
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.0.tgz",
2502
- "integrity": "sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==",
2630
+ "version": "4.30.1",
2631
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz",
2632
+ "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==",
2633
"cpu": [
2634
"loong64"
2635
],
@@ -2511,9 +2641,9 @@
2641
]
2642
},
2643
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
2514
- "version": "4.30.0",
2515
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.0.tgz",
2516
- "integrity": "sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==",
2644
+ "version": "4.30.1",
2645
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz",
2646
+ "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==",
2647
"cpu": [
2648
"ppc64"
2649
],
@@ -2525,9 +2655,9 @@
2655
]
2656
},
2657
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
2528
- "version": "4.30.0",
2529
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.0.tgz",
2530
- "integrity": "sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==",
2658
+ "version": "4.30.1",
2659
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz",
2660
+ "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==",
2661
"cpu": [
2662
"riscv64"
2663
],
@@ -2539,9 +2669,9 @@
2669
]
2670
},
2671
"node_modules/@rollup/rollup-linux-s390x-gnu": {
2542
- "version": "4.30.0",
2543
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.0.tgz",
2544
- "integrity": "sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==",
2672
+ "version": "4.30.1",
2673
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz",
2674
+ "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==",
2675
"cpu": [
2676
"s390x"
2677
],
@@ -2553,9 +2683,9 @@
2683
]
2684
},
2685
"node_modules/@rollup/rollup-linux-x64-gnu": {
2556
- "version": "4.30.0",
2557
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.0.tgz",
2558
- "integrity": "sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==",
2686
+ "version": "4.30.1",
2687
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
2688
+ "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==",
2689
"cpu": [
2690
"x64"
2691
],
@@ -2566,9 +2696,9 @@
2696
]
2697
},
2698
"node_modules/@rollup/rollup-linux-x64-musl": {
2569
- "version": "4.30.0",
2570
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.0.tgz",
2571
- "integrity": "sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==",
2699
+ "version": "4.30.1",
2700
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz",
2701
+ "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==",
2702
"cpu": [
2703
"x64"
2704
],
@@ -2580,9 +2710,9 @@
2710
]
2711
},
2712
"node_modules/@rollup/rollup-win32-arm64-msvc": {
2583
- "version": "4.30.0",
2584
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.0.tgz",
2585
- "integrity": "sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==",
2713
+ "version": "4.30.1",
2714
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz",
2715
+ "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==",
2716
"cpu": [
2717
"arm64"
2718
],
@@ -2594,9 +2724,9 @@
2724
]
2725
},
2726
"node_modules/@rollup/rollup-win32-ia32-msvc": {
2597
- "version": "4.30.0",
2598
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.0.tgz",
2599
- "integrity": "sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==",
2727
+ "version": "4.30.1",
2728
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz",
2729
+ "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==",
2730
"cpu": [
2731
"ia32"
2732
],
@@ -2608,9 +2738,9 @@
2738
]
2739
},
2740
"node_modules/@rollup/rollup-win32-x64-msvc": {
2611
- "version": "4.30.0",
2612
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.0.tgz",
2613
- "integrity": "sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==",
2741
+ "version": "4.30.1",
2742
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz",
2743
+ "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==",
2744
"cpu": [
2745
"x64"
2746
],
@@ -2629,72 +2759,72 @@
2759
"license": "MIT"
2760
},
2761
"node_modules/@shikijs/core": {
2632
- "version": "1.26.1",
2633
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.26.1.tgz",
2634
- "integrity": "sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==",
2762
+ "version": "1.27.2",
2763
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.27.2.tgz",
2764
+ "integrity": "sha512-ns1dokDr0KE1lQ9mWd4rqaBkhSApk0qGCK1+lOqwnkQSkVZ08UGqXj1Ef8dAcTMZNFkN6PSNjkL5TYNX7pyPbQ==",
2765
"license": "MIT",
2766
"dependencies": {
2637
- "@shikijs/engine-javascript": "1.26.1",
2638
- "@shikijs/engine-oniguruma": "1.26.1",
2639
- "@shikijs/types": "1.26.1",
2767
+ "@shikijs/engine-javascript": "1.27.2",
2768
+ "@shikijs/engine-oniguruma": "1.27.2",
2769
+ "@shikijs/types": "1.27.2",
2770
"@shikijs/vscode-textmate": "^10.0.1",
2771
"@types/hast": "^3.0.4",
2772
"hast-util-to-html": "^9.0.4"
2773
}
2774
},
2775
"node_modules/@shikijs/engine-javascript": {
2646
- "version": "1.26.1",
2647
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.26.1.tgz",
2648
- "integrity": "sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==",
2776
+ "version": "1.27.2",
2777
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.27.2.tgz",
2778
+ "integrity": "sha512-0JB7U5vJc16NShBdxv9hSSJYSKX79+32O7F4oXIxJLdYfomyFvx4B982ackUI9ftO9T3WwagkiiD3nOxOOLiGA==",
2779
"license": "MIT",
2780
"dependencies": {
2651
- "@shikijs/types": "1.26.1",
2781
+ "@shikijs/types": "1.27.2",
2782
"@shikijs/vscode-textmate": "^10.0.1",
2653
- "oniguruma-to-es": "0.10.0"
2783
+ "oniguruma-to-es": "^2.0.0"
2784
}
2785
},
2786
"node_modules/@shikijs/engine-oniguruma": {
2657
- "version": "1.26.1",
2658
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz",
2659
- "integrity": "sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==",
2787
+ "version": "1.27.2",
2788
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.27.2.tgz",
2789
+ "integrity": "sha512-FZYKD1KN7srvpkz4lbGLOYWlyDU4Rd+2RtuKfABTkafAPOFr+J6umfIwY/TzOQqfNtWjL7SAwPAO0dcOraRLaQ==",
2790
"license": "MIT",
2791
"dependencies": {
2662
- "@shikijs/types": "1.26.1",
2792
+ "@shikijs/types": "1.27.2",
2793
"@shikijs/vscode-textmate": "^10.0.1"
2794
}
2795
},
2796
"node_modules/@shikijs/langs": {
2667
- "version": "1.26.1",
2668
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.26.1.tgz",
2669
- "integrity": "sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==",
2797
+ "version": "1.27.2",
2798
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.27.2.tgz",
2799
+ "integrity": "sha512-MSrknKL0DbeXvhtSigMLIzjPOOQfvK7fsbcRv2NUUB0EvuTTomY8/U+lAkczYrXY2+dygKOapJKk8ScFYbtoNw==",
2800
"license": "MIT",
2801
"dependencies": {
2672
- "@shikijs/types": "1.26.1"
2802
+ "@shikijs/types": "1.27.2"
2803
}
2804
},
2805
"node_modules/@shikijs/markdown-it": {
2676
- "version": "1.26.1",
2677
- "resolved": "https://registry.npmjs.org/@shikijs/markdown-it/-/markdown-it-1.26.1.tgz",
2678
- "integrity": "sha512-+1WSmaD1ANN0x15ud4oMw5RFgFdyT0FpU9OoE7MUbiaU9+pRtAjIx0viTVsbhBzJEG1oVUBzK1Wc6Wz7toiTZg==",
2806
+ "version": "1.27.2",
2807
+ "resolved": "https://registry.npmjs.org/@shikijs/markdown-it/-/markdown-it-1.27.2.tgz",
2808
+ "integrity": "sha512-jZfsrLhqqettpsRjKSiD+2AgIt7PfBQIX8X3qyiwSZrIjtcP6adb/hopj5tCXKYCbXA1bPe1T5QwNfylKSUvkw==",
2809
"license": "MIT",
2810
"dependencies": {
2811
"markdown-it": "^14.1.0",
2682
- "shiki": "1.26.1"
2812
+ "shiki": "1.27.2"
2813
}
2814
},
2815
"node_modules/@shikijs/themes": {
2686
- "version": "1.26.1",
2687
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.26.1.tgz",
2688
- "integrity": "sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==",
2816
+ "version": "1.27.2",
2817
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.27.2.tgz",
2818
+ "integrity": "sha512-Yw/uV7EijjWavIIZLoWneTAohcbBqEKj6XMX1bfMqO3llqTKsyXukPp1evf8qPqzUHY7ibauqEaQchhfi857mg==",
2819
"license": "MIT",
2820
"dependencies": {
2691
- "@shikijs/types": "1.26.1"
2821
+ "@shikijs/types": "1.27.2"
2822
}
2823
},
2824
"node_modules/@shikijs/types": {
2695
- "version": "1.26.1",
2696
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.1.tgz",
2697
- "integrity": "sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==",
2825
+ "version": "1.27.2",
2826
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.27.2.tgz",
2827
+ "integrity": "sha512-DM9OWUyjmdYdnKDpaGB/GEn9XkToyK1tqxuqbmc5PV+5K8WjjwfygL3+cIvbkSw2v1ySwHDgqATq/+98pJ4Kyg==",
2828
"license": "MIT",
2829
"dependencies": {
2830
"@shikijs/vscode-textmate": "^10.0.1",
@@ -2744,9 +2874,9 @@
2874
}
2875
},
2876
"node_modules/@stylistic/eslint-plugin": {
2747
- "version": "2.12.1",
2748
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.12.1.tgz",
2749
- "integrity": "sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==",
2877
+ "version": "2.13.0",
2878
+ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz",
2879
+ "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==",
2880
"dev": true,
2881
"license": "MIT",
2882
"dependencies": {
@@ -2764,9 +2894,9 @@
2894
}
2895
},
2896
"node_modules/@svgdotjs/svg.draggable.js": {
2767
- "version": "3.0.4",
2768
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.4.tgz",
2769
- "integrity": "sha512-vWi/Col5Szo74HJVBgMHz23kLVljt3jvngmh0DzST45iO2ubIZ487uUAHIxSZH2tVRyiaaTL+Phaasgp4gUD2g==",
2897
+ "version": "3.0.5",
2898
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.5.tgz",
2899
+ "integrity": "sha512-ljL/fB0tAjRfFOJGhXpr7rEx9DJ6D7Pxt3AXvgxjEM17g6wK3Ho9nXhntraOMx8JLZdq4NBMjokeXMvnQzJVYA==",
2900
"license": "MIT",
2901
"peer": true,
2902
"peerDependencies": {
@@ -2874,6 +3004,17 @@
3004
"dev": true,
3005
"license": "MIT"
3006
},
3007
+ "node_modules/@types/eslint": {
3008
+ "version": "9.6.1",
3009
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
3010
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
3011
+ "dev": true,
3012
+ "license": "MIT",
3013
+ "dependencies": {
3014
+ "@types/estree": "*",
3015
+ "@types/json-schema": "*"
3016
+ }
3017
+ },
3018
"node_modules/@types/estree": {
3019
"version": "1.0.6",
3020
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -2981,9 +3122,9 @@
3122
"license": "MIT"
3123
},
3124
"node_modules/@types/node": {
2984
- "version": "22.10.5",
2985
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
2986
- "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
3125
+ "version": "22.10.7",
3126
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz",
3127
+ "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==",
3128
"dev": true,
3129
"license": "MIT",
3130
"dependencies": {
@@ -3056,17 +3197,17 @@
3197
}
3198
},
3199
"node_modules/@typescript-eslint/eslint-plugin": {
3059
- "version": "8.19.1",
3060
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.1.tgz",
3061
- "integrity": "sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==",
3200
+ "version": "8.20.0",
3201
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz",
3202
+ "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==",
3203
"dev": true,
3204
"license": "MIT",
3205
"dependencies": {
3206
"@eslint-community/regexpp": "^4.10.0",
3066
- "@typescript-eslint/scope-manager": "8.19.1",
3067
- "@typescript-eslint/type-utils": "8.19.1",
3068
- "@typescript-eslint/utils": "8.19.1",
3069
- "@typescript-eslint/visitor-keys": "8.19.1",
3207
+ "@typescript-eslint/scope-manager": "8.20.0",
3208
+ "@typescript-eslint/type-utils": "8.20.0",
3209
+ "@typescript-eslint/utils": "8.20.0",
3210
+ "@typescript-eslint/visitor-keys": "8.20.0",
3211
"graphemer": "^1.4.0",
3212
"ignore": "^5.3.1",
3213
"natural-compare": "^1.4.0",
@@ -3086,16 +3227,16 @@
3227
}
3228
},
3229
"node_modules/@typescript-eslint/parser": {
3089
- "version": "8.19.1",
3090
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.1.tgz",
3091
- "integrity": "sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==",
3230
+ "version": "8.20.0",
3231
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz",
3232
+ "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==",
3233
"dev": true,
3234
"license": "MIT",
3235
"dependencies": {
3095
- "@typescript-eslint/scope-manager": "8.19.1",
3096
- "@typescript-eslint/types": "8.19.1",
3097
- "@typescript-eslint/typescript-estree": "8.19.1",
3098
- "@typescript-eslint/visitor-keys": "8.19.1",
3236
+ "@typescript-eslint/scope-manager": "8.20.0",
3237
+ "@typescript-eslint/types": "8.20.0",
3238
+ "@typescript-eslint/typescript-estree": "8.20.0",
3239
+ "@typescript-eslint/visitor-keys": "8.20.0",
3240
"debug": "^4.3.4"
3241
},
3242
"engines": {
@@ -3111,14 +3252,14 @@
3252
}
3253
},
3254
"node_modules/@typescript-eslint/scope-manager": {
3114
- "version": "8.19.1",
3115
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz",
3116
- "integrity": "sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==",
3255
+ "version": "8.20.0",
3256
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz",
3257
+ "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==",
3258
"dev": true,
3259
"license": "MIT",
3260
"dependencies": {
3120
- "@typescript-eslint/types": "8.19.1",
3121
- "@typescript-eslint/visitor-keys": "8.19.1"
3261
+ "@typescript-eslint/types": "8.20.0",
3262
+ "@typescript-eslint/visitor-keys": "8.20.0"
3263
},
3264
"engines": {
3265
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3129,14 +3270,14 @@
3270
}
3271
},
3272
"node_modules/@typescript-eslint/type-utils": {
3132
- "version": "8.19.1",
3133
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.1.tgz",
3134
- "integrity": "sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==",
3273
+ "version": "8.20.0",
3274
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz",
3275
+ "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==",
3276
"dev": true,
3277
"license": "MIT",
3278
"dependencies": {
3138
- "@typescript-eslint/typescript-estree": "8.19.1",
3139
- "@typescript-eslint/utils": "8.19.1",
3279
+ "@typescript-eslint/typescript-estree": "8.20.0",
3280
+ "@typescript-eslint/utils": "8.20.0",
3281
"debug": "^4.3.4",
3282
"ts-api-utils": "^2.0.0"
3283
},
@@ -3153,9 +3294,9 @@
3294
}
3295
},
3296
"node_modules/@typescript-eslint/types": {
3156
- "version": "8.19.1",
3157
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.1.tgz",
3158
- "integrity": "sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==",
3297
+ "version": "8.20.0",
3298
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz",
3299
+ "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==",
3300
"dev": true,
3301
"license": "MIT",
3302
"engines": {
@@ -3167,14 +3308,14 @@
3308
}
3309
},
3310
"node_modules/@typescript-eslint/typescript-estree": {
3170
- "version": "8.19.1",
3171
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz",
3172
- "integrity": "sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==",
3311
+ "version": "8.20.0",
3312
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz",
3313
+ "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==",
3314
"dev": true,
3315
"license": "MIT",
3316
"dependencies": {
3176
- "@typescript-eslint/types": "8.19.1",
3177
- "@typescript-eslint/visitor-keys": "8.19.1",
3317
+ "@typescript-eslint/types": "8.20.0",
3318
+ "@typescript-eslint/visitor-keys": "8.20.0",
3319
"debug": "^4.3.4",
3320
"fast-glob": "^3.3.2",
3321
"is-glob": "^4.0.3",
@@ -3194,16 +3335,16 @@
3335
}
3336
},
3337
"node_modules/@typescript-eslint/utils": {
3197
- "version": "8.19.1",
3198
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.1.tgz",
3199
- "integrity": "sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==",
3338
+ "version": "8.20.0",
3339
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz",
3340
+ "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==",
3341
"dev": true,
3342
"license": "MIT",
3343
"dependencies": {
3344
"@eslint-community/eslint-utils": "^4.4.0",
3204
- "@typescript-eslint/scope-manager": "8.19.1",
3205
- "@typescript-eslint/types": "8.19.1",
3206
- "@typescript-eslint/typescript-estree": "8.19.1"
3345
+ "@typescript-eslint/scope-manager": "8.20.0",
3346
+ "@typescript-eslint/types": "8.20.0",
3347
+ "@typescript-eslint/typescript-estree": "8.20.0"
3348
},
3349
"engines": {
3350
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3218,13 +3359,13 @@
3359
}
3360
},
3361
"node_modules/@typescript-eslint/visitor-keys": {
3221
- "version": "8.19.1",
3222
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz",
3223
- "integrity": "sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==",
3362
+ "version": "8.20.0",
3363
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz",
3364
+ "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==",
3365
"dev": true,
3366
"license": "MIT",
3367
"dependencies": {
3227
- "@typescript-eslint/types": "8.19.1",
3368
+ "@typescript-eslint/types": "8.20.0",
3369
"eslint-visitor-keys": "^4.2.0"
3370
},
3371
"engines": {
@@ -3275,9 +3416,9 @@
3416
}
3417
},
3418
"node_modules/@vitest/eslint-plugin": {
3278
- "version": "1.1.24",
3279
- "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.24.tgz",
3280
- "integrity": "sha512-7IaENe4NNy33g0iuuy5bHY69JYYRjpv4lMx6H5Wp30W7ez2baLHwxsXF5TM4wa8JDYZt8ut99Ytoj7GiDO01hw==",
3419
+ "version": "1.1.25",
3420
+ "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.25.tgz",
3421
+ "integrity": "sha512-u8DpDnMbPcqBmJOB4PeEtn6q7vKmLVTLFMpzoxSAo0hjYdl4iYSHRleqwPQo0ywc7UV0S6RKIahYRQ3BnZdMVw==",
3422
"dev": true,
3423
"license": "MIT",
3424
"peerDependencies": {
@@ -3338,6 +3479,13 @@
3479
"url": "https://opencollective.com/vitest"
3480
}
3481
},
3482
+ "node_modules/@vitest/runner/node_modules/pathe": {
3483
+ "version": "1.1.2",
3484
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
3485
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
3486
+ "dev": true,
3487
+ "license": "MIT"
3488
+ },
3489
"node_modules/@vitest/snapshot": {
3490
"version": "2.1.8",
3491
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz",
@@ -3353,6 +3501,13 @@
3501
"url": "https://opencollective.com/vitest"
3502
}
3503
},
3504
+ "node_modules/@vitest/snapshot/node_modules/pathe": {
3505
+ "version": "1.1.2",
3506
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
3507
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
3508
+ "dev": true,
3509
+ "license": "MIT"
3510
+ },
3511
"node_modules/@vitest/spy": {
3512
"version": "2.1.8",
3513
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz",
@@ -3529,14 +3684,14 @@
3684
"license": "MIT"
3685
},
3686
"node_modules/@vue/devtools-core": {
3532
- "version": "7.6.8",
3533
- "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.6.8.tgz",
3534
- "integrity": "sha512-8X4roysTwzQ94o7IobjVcOd1aZF5iunikrMrHPI2uUdigZCi2kFTQc7ffYiFiTNaLElCpjOhCnM7bo7aK1yU7A==",
3687
+ "version": "7.7.0",
3688
+ "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.0.tgz",
3689
+ "integrity": "sha512-tSO3pghV5RZGSonZ87S2fOGru3X93epmar5IjZOWjHxH6XSwnK5UbR2aW5puZV+LgLoVYrcNou3krSo5k1F31g==",
3690
"dev": true,
3691
"license": "MIT",
3692
"dependencies": {
3538
- "@vue/devtools-kit": "^7.6.8",
3539
- "@vue/devtools-shared": "^7.6.8",
3693
+ "@vue/devtools-kit": "^7.7.0",
3694
+ "@vue/devtools-shared": "^7.7.0",
3695
"mitt": "^3.0.1",
3696
"nanoid": "^5.0.9",
3697
"pathe": "^1.1.2",
@@ -3546,14 +3701,21 @@
3701
"vue": "^3.0.0"
3702
}
3703
},
3704
+ "node_modules/@vue/devtools-core/node_modules/pathe": {
3705
+ "version": "1.1.2",
3706
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
3707
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
3708
+ "dev": true,
3709
+ "license": "MIT"
3710
+ },
3711
"node_modules/@vue/devtools-kit": {
3550
- "version": "7.6.8",
3551
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.6.8.tgz",
3552
- "integrity": "sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw==",
3712
+ "version": "7.7.0",
3713
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.0.tgz",
3714
+ "integrity": "sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA==",
3715
"dev": true,
3716
"license": "MIT",
3717
"dependencies": {
3556
- "@vue/devtools-shared": "^7.6.8",
3718
+ "@vue/devtools-shared": "^7.7.0",
3719
"birpc": "^0.2.19",
3720
"hookable": "^5.5.3",
3721
"mitt": "^3.0.1",
@@ -3563,9 +3725,9 @@
3725
}
3726
},
3727
"node_modules/@vue/devtools-shared": {
3566
- "version": "7.6.8",
3567
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.6.8.tgz",
3568
- "integrity": "sha512-9MBPO5Z3X1nYGFqTJyohl6Gmf/J7UNN1oicHdyzBVZP4jnhZ4c20MgtaHDIzWmHDHCMYVS5bwKxT3jxh7gOOKA==",
3728
+ "version": "7.7.0",
3729
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.0.tgz",
3730
+ "integrity": "sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==",
3731
"dev": true,
3732
"license": "MIT",
3733
"dependencies": {
@@ -3678,14 +3840,14 @@
3840
}
3841
},
3842
"node_modules/@vueuse/core": {
3681
- "version": "12.3.0",
3682
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.3.0.tgz",
3683
- "integrity": "sha512-cnV8QDKZrsyKC7tWjPbeEUz2cD9sa9faxF2YkR8QqNwfofgbOhmfIgvSYmkp+ttSvfOw4E6hLcQx15mRPr0yBA==",
3843
+ "version": "12.4.0",
3844
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.4.0.tgz",
3845
+ "integrity": "sha512-XnjQYcJwCsyXyIafyA6SvyN/OBtfPnjvJmbxNxQjCcyWD198urwm5TYvIUUyAxEAN0K7HJggOgT15cOlWFyLeA==",
3846
"license": "MIT",
3847
"dependencies": {
3848
"@types/web-bluetooth": "^0.0.20",
3687
- "@vueuse/metadata": "12.3.0",
3688
- "@vueuse/shared": "12.3.0",
3849
+ "@vueuse/metadata": "12.4.0",
3850
+ "@vueuse/shared": "12.4.0",
3851
"vue": "^3.5.13"
3852
},
3853
"funding": {
@@ -3693,18 +3855,18 @@
3855
}
3856
},
3857
"node_modules/@vueuse/metadata": {
3696
- "version": "12.3.0",
3697
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.3.0.tgz",
3698
- "integrity": "sha512-M/iQHHjMffOv2npsw2ihlUx1CTiBwPEgb7DzByLq7zpg1+Ke8r7s9p5ybUWc5OIeGewtpY4Xy0R2cKqFqM8hFg==",
3858
+ "version": "12.4.0",
3859
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.4.0.tgz",
3860
+ "integrity": "sha512-AhPuHs/qtYrKHUlEoNO6zCXufu8OgbR8S/n2oMw1OQuBQJ3+HOLQ+EpvXs+feOlZMa0p8QVvDWNlmcJJY8rW2g==",
3861
"license": "MIT",
3862
"funding": {
3863
"url": "https://github.com/sponsors/antfu"
3864
}
3865
},
3866
"node_modules/@vueuse/shared": {
3705
- "version": "12.3.0",
3706
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.3.0.tgz",
3707
- "integrity": "sha512-X3YD35GUeW0d5Gajcwv9jdLAJTV2Jdb/Ll6Ii2JIYcKLYZqv5wxyLeKtiQkqWmHg3v0J0ZWjDUMVOw2E7RCXfA==",
3867
+ "version": "12.4.0",
3868
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.4.0.tgz",
3869
+ "integrity": "sha512-9yLgbHVIF12OSCojnjTIoZL1+UA10+O4E1aD6Hpfo/DKVm5o3SZIwz6CupqGy3+IcKI8d6Jnl26EQj/YucnW0Q==",
3870
"license": "MIT",
3871
"dependencies": {
3872
"vue": "^3.5.13"
@@ -3808,9 +3970,9 @@
3970
}
3971
},
3972
"node_modules/alien-signals": {
3811
- "version": "0.4.12",
3812
- "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.12.tgz",
3813
- "integrity": "sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg==",
3973
+ "version": "0.4.14",
3974
+ "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz",
3975
+ "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==",
3976
"dev": true,
3977
"license": "MIT"
3978
},
@@ -4237,9 +4399,9 @@
4399
}
4400
},
4401
"node_modules/browserslist": {
4240
- "version": "4.24.3",
4241
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
4242
- "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
4402
+ "version": "4.24.4",
4403
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
4404
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
4405
"funding": [
4406
{
4407
"type": "opencollective",
@@ -4385,6 +4547,12 @@
4547
}
4548
}
4549
},
4550
+ "node_modules/c12/node_modules/pathe": {
4551
+ "version": "1.1.2",
4552
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
4553
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
4554
+ "license": "MIT"
4555
+ },
4556
"node_modules/cac": {
4557
"version": "6.7.14",
4558
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -4492,9 +4660,9 @@
4660
}
4661
},
4662
"node_modules/caniuse-lite": {
4495
- "version": "1.0.30001690",
4496
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz",
4497
- "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==",
4663
+ "version": "1.0.30001692",
4664
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
4665
+ "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==",
4666
"funding": [
4667
{
4668
"type": "opencollective",
@@ -4642,12 +4810,12 @@
4810
}
4811
},
4812
"node_modules/chokidar/node_modules/readdirp": {
4645
- "version": "4.0.2",
4646
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
4647
- "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
4813
+ "version": "4.1.1",
4814
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
4815
+ "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
4816
"license": "MIT",
4817
"engines": {
4650
- "node": ">= 14.16.0"
4818
+ "node": ">= 14.18.0"
4819
},
4820
"funding": {
4821
"type": "individual",
@@ -4932,9 +5100,9 @@
5100
"license": "ISC"
5101
},
5102
"node_modules/consola": {
4935
- "version": "3.3.3",
4936
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz",
4937
- "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==",
5103
+ "version": "3.4.0",
5104
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz",
5105
+ "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==",
5106
"license": "MIT",
5107
"engines": {
5108
"node": "^14.18.0 || >=16.10.0"
@@ -5000,13 +5168,13 @@
5168
}
5169
},
5170
"node_modules/core-js-compat": {
5003
- "version": "3.39.0",
5004
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
5005
- "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
5171
+ "version": "3.40.0",
5172
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz",
5173
+ "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==",
5174
"dev": true,
5175
"license": "MIT",
5176
"dependencies": {
5009
- "browserslist": "^4.24.2"
5177
+ "browserslist": "^4.24.3"
5178
},
5179
"funding": {
5180
"type": "opencollective",
@@ -5176,13 +5344,14 @@
5344
"license": "CC0-1.0"
5345
},
5346
"node_modules/cssstyle": {
5179
- "version": "4.1.0",
5180
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
5181
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
5347
+ "version": "4.2.1",
5348
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz",
5349
+ "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==",
5350
"dev": true,
5351
"license": "MIT",
5352
"dependencies": {
5185
- "rrweb-cssom": "^0.7.1"
5353
+ "@asamuzakjp/css-color": "^2.8.2",
5354
+ "rrweb-cssom": "^0.8.0"
5355
},
5356
"engines": {
5357
"node": ">=18"
@@ -5874,9 +6043,9 @@
6043
"license": "MIT"
6044
},
6045
"node_modules/electron-to-chromium": {
5877
- "version": "1.5.78",
5878
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.78.tgz",
5879
- "integrity": "sha512-UmwIt7HRKN1rsJfddG5UG7rCTCTAKoS9JeOy/R0zSenAyaZ8SU3RuXlwcratxhdxGRNpk03iq8O7BA3W7ibLVw==",
6046
+ "version": "1.5.83",
6047
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz",
6048
+ "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==",
6049
"license": "ISC"
6050
},
6051
"node_modules/emoji-regex": {
@@ -5999,9 +6168,9 @@
6168
"license": "MIT"
6169
},
6170
"node_modules/es-object-atoms": {
6002
- "version": "1.0.0",
6003
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
6004
- "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
6171
+ "version": "1.1.1",
6172
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
6173
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
6174
"dev": true,
6175
"license": "MIT",
6176
"dependencies": {
@@ -6082,19 +6251,19 @@
6251
}
6252
},
6253
"node_modules/eslint": {
6085
- "version": "9.17.0",
6086
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz",
6087
- "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==",
6254
+ "version": "9.18.0",
6255
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz",
6256
+ "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==",
6257
"dev": true,
6258
"license": "MIT",
6259
"dependencies": {
6260
"@eslint-community/eslint-utils": "^4.2.0",
6261
"@eslint-community/regexpp": "^4.12.1",
6262
"@eslint/config-array": "^0.19.0",
6094
- "@eslint/core": "^0.9.0",
6263
+ "@eslint/core": "^0.10.0",
6264
"@eslint/eslintrc": "^3.2.0",
6096
- "@eslint/js": "9.17.0",
6097
- "@eslint/plugin-kit": "^0.2.3",
6265
+ "@eslint/js": "9.18.0",
6266
+ "@eslint/plugin-kit": "^0.2.5",
6267
"@humanfs/node": "^0.16.6",
6268
"@humanwhocodes/module-importer": "^1.0.1",
6269
"@humanwhocodes/retry": "^0.4.1",
@@ -6158,13 +6327,13 @@
6327
}
6328
},
6329
"node_modules/eslint-config-flat-gitignore": {
6161
- "version": "0.3.0",
6162
- "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.3.0.tgz",
6163
- "integrity": "sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==",
6330
+ "version": "1.0.0",
6331
+ "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-1.0.0.tgz",
6332
+ "integrity": "sha512-EWpSLrAP80IdcYK5sIhq/qAY0pmUdBnbzqzpE3QAn6H6wLBN26cMRoMNU9Di8upTzUSL6TXeYRxWhTYuz8+UQA==",
6333
"dev": true,
6334
"license": "MIT",
6335
"dependencies": {
6167
- "@eslint/compat": "^1.1.1",
6336
+ "@eslint/compat": "^1.2.4",
6337
"find-up-simple": "^1.0.0"
6338
},
6339
"funding": {
@@ -6175,13 +6344,13 @@
6344
}
6345
},
6346
"node_modules/eslint-flat-config-utils": {
6178
- "version": "0.4.0",
6179
- "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-0.4.0.tgz",
6180
- "integrity": "sha512-kfd5kQZC+BMO0YwTol6zxjKX1zAsk8JfSAopbKjKqmENTJcew+yBejuvccAg37cvOrN0Mh+DVbeyznuNWEjt4A==",
6347
+ "version": "1.0.0",
6348
+ "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-1.0.0.tgz",
6349
+ "integrity": "sha512-tmzcXeCsa24/u3glyw1Mo7KfC/r9a5Vsu1nPCkX7uefD7C5Z4x922Q2KP/drhTLbOI5lcFHYpfXjKhqqnUWObw==",
6350
"dev": true,
6351
"license": "MIT",
6352
"dependencies": {
6184
- "pathe": "^1.1.2"
6353
+ "pathe": "^2.0.0"
6354
},
6355
"funding": {
6356
"url": "https://github.com/sponsors/antfu"
@@ -6232,9 +6401,9 @@
6401
}
6402
},
6403
"node_modules/eslint-merge-processors": {
6235
- "version": "0.1.0",
6236
- "resolved": "https://registry.npmjs.org/eslint-merge-processors/-/eslint-merge-processors-0.1.0.tgz",
6237
- "integrity": "sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==",
6404
+ "version": "1.0.0",
6405
+ "resolved": "https://registry.npmjs.org/eslint-merge-processors/-/eslint-merge-processors-1.0.0.tgz",
6406
+ "integrity": "sha512-4GybyHmhXtT7/W8RAouQzNM0791sYasJCTYHIAYjuiJvbNFY0jMKkoESREhX+mjX37dxiN6v4EqhZ1nc0tJF7A==",
6407
"dev": true,
6408
"license": "MIT",
6409
"funding": {
@@ -6261,13 +6430,13 @@
6430
}
6431
},
6432
"node_modules/eslint-plugin-command": {
6264
- "version": "0.2.7",
6265
- "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-0.2.7.tgz",
6266
- "integrity": "sha512-UXJ/1R6kdKDcHhiRqxHJ9RZ3juMR1IWQuSrnwt56qCjxt/am+5+YDt6GKs1FJPnppe6/geEYsO3CR9jc63i0xw==",
6433
+ "version": "2.1.0",
6434
+ "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-2.1.0.tgz",
6435
+ "integrity": "sha512-S3gvDSCRHLdRG7NYaevLvGA0g/txOju7NEB2di7SE80NtbCwsvpi/fft045YuTZpOzqCRUfuye39raldmpXXYQ==",
6436
"dev": true,
6437
"license": "MIT",
6438
"dependencies": {
6270
- "@es-joy/jsdoccomment": "^0.49.0"
6439
+ "@es-joy/jsdoccomment": "^0.50.0"
6440
},
6441
"funding": {
6442
"url": "https://github.com/sponsors/antfu"
@@ -6375,6 +6544,21 @@
6544
"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
6545
}
6546
},
6547
+ "node_modules/eslint-plugin-jsdoc/node_modules/@es-joy/jsdoccomment": {
6548
+ "version": "0.49.0",
6549
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
6550
+ "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
6551
+ "dev": true,
6552
+ "license": "MIT",
6553
+ "dependencies": {
6554
+ "comment-parser": "1.4.1",
6555
+ "esquery": "^1.6.0",
6556
+ "jsdoc-type-pratt-parser": "~4.1.0"
6557
+ },
6558
+ "engines": {
6559
+ "node": ">=16"
6560
+ }
6561
+ },
6562
"node_modules/eslint-plugin-jsonc": {
6563
"version": "2.18.2",
6564
"resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.18.2.tgz",
@@ -6676,9 +6860,9 @@
6860
}
6861
},
6862
"node_modules/eslint-processor-vue-blocks": {
6679
- "version": "0.1.2",
6680
- "resolved": "https://registry.npmjs.org/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-0.1.2.tgz",
6681
- "integrity": "sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ==",
6863
+ "version": "1.0.0",
6864
+ "resolved": "https://registry.npmjs.org/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-1.0.0.tgz",
6865
+ "integrity": "sha512-q+Wn9bCml65NwYtuINVCE5dUqZa/uVoY4jfc8qEDwWbcGqdRyfJJmAONNZsreA4Q9EJqjYGjk8Hk1QuwAktgkw==",
6866
"dev": true,
6867
"license": "MIT",
6868
"funding": {
@@ -7270,9 +7454,9 @@
7454
"license": "MIT"
7455
},
7456
"node_modules/fs-extra": {
7273
- "version": "11.2.0",
7274
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
7275
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
7457
+ "version": "11.3.0",
7458
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
7459
+ "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
7460
"dev": true,
7461
"license": "MIT",
7462
"dependencies": {
@@ -7470,6 +7654,12 @@
7654
"giget": "dist/cli.mjs"
7655
}
7656
},
7657
+ "node_modules/giget/node_modules/pathe": {
7658
+ "version": "1.1.2",
7659
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
7660
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
7661
+ "license": "MIT"
7662
+ },
7663
"node_modules/glob": {
7664
"version": "10.4.5",
7665
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -8074,6 +8264,13 @@
8264
"url": "https://github.com/sponsors/antfu"
8265
}
8266
},
8267
+ "node_modules/importx/node_modules/pathe": {
8268
+ "version": "1.1.2",
8269
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
8270
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
8271
+ "dev": true,
8272
+ "license": "MIT"
8273
+ },
8274
"node_modules/imurmurhash": {
8275
"version": "0.1.4",
8276
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -8553,23 +8750,23 @@
8750
}
8751
},
8752
"node_modules/jsdom": {
8556
- "version": "25.0.1",
8557
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
8558
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
8753
+ "version": "26.0.0",
8754
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz",
8755
+ "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==",
8756
"dev": true,
8757
"license": "MIT",
8758
"dependencies": {
8562
- "cssstyle": "^4.1.0",
8759
+ "cssstyle": "^4.2.1",
8760
"data-urls": "^5.0.0",
8761
"decimal.js": "^10.4.3",
8565
- "form-data": "^4.0.0",
8762
+ "form-data": "^4.0.1",
8763
"html-encoding-sniffer": "^4.0.0",
8764
"http-proxy-agent": "^7.0.2",
8568
- "https-proxy-agent": "^7.0.5",
8765
+ "https-proxy-agent": "^7.0.6",
8766
"is-potential-custom-element-name": "^1.0.1",
8570
- "nwsapi": "^2.2.12",
8571
- "parse5": "^7.1.2",
8572
- "rrweb-cssom": "^0.7.1",
8767
+ "nwsapi": "^2.2.16",
8768
+ "parse5": "^7.2.1",
8769
+ "rrweb-cssom": "^0.8.0",
8770
"saxes": "^6.0.0",
8771
"symbol-tree": "^3.2.4",
8772
"tough-cookie": "^5.0.0",
@@ -8577,7 +8774,7 @@
8774
"webidl-conversions": "^7.0.0",
8775
"whatwg-encoding": "^3.1.1",
8776
"whatwg-mimetype": "^4.0.0",
8580
- "whatwg-url": "^14.0.0",
8777
+ "whatwg-url": "^14.1.0",
8778
"ws": "^8.18.0",
8779
"xml-name-validator": "^5.0.0"
8780
},
@@ -8585,7 +8782,7 @@
8782
"node": ">=18"
8783
},
8784
"peerDependencies": {
8588
- "canvas": "^2.11.2"
8785
+ "canvas": "^3.0.0"
8786
},
8787
"peerDependenciesMeta": {
8788
"canvas": {
@@ -9070,13 +9267,13 @@
9267
}
9268
},
9269
"node_modules/local-pkg": {
9073
- "version": "0.5.1",
9074
- "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz",
9075
- "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
9270
+ "version": "1.0.0",
9271
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz",
9272
+ "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==",
9273
"license": "MIT",
9274
"dependencies": {
9275
"mlly": "^1.7.3",
9079
- "pkg-types": "^1.2.1"
9276
+ "pkg-types": "^1.3.0"
9277
},
9278
"engines": {
9279
"node": ">=14"
@@ -10319,14 +10516,14 @@
10516
}
10517
},
10518
"node_modules/mlly": {
10322
- "version": "1.7.3",
10323
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz",
10324
- "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==",
10519
+ "version": "1.7.4",
10520
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
10521
+ "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
10522
"license": "MIT",
10523
"dependencies": {
10524
"acorn": "^8.14.0",
10328
- "pathe": "^1.1.2",
10329
- "pkg-types": "^1.2.1",
10525
+ "pathe": "^2.0.1",
10526
+ "pkg-types": "^1.3.0",
10527
"ufo": "^1.5.4"
10528
}
10529
},
@@ -10800,6 +10997,12 @@
10997
"url": "https://github.com/sponsors/sindresorhus"
10998
}
10999
},
11000
+ "node_modules/nypm/node_modules/pathe": {
11001
+ "version": "1.1.2",
11002
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
11003
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
11004
+ "license": "MIT"
11005
+ },
11006
"node_modules/nypm/node_modules/signal-exit": {
11007
"version": "4.1.0",
11008
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -10913,9 +11116,9 @@
11116
}
11117
},
11118
"node_modules/oniguruma-to-es": {
10916
- "version": "0.10.0",
10917
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.10.0.tgz",
10918
- "integrity": "sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==",
11119
+ "version": "2.0.0",
11120
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.0.0.tgz",
11121
+ "integrity": "sha512-pE7+9jQgomy10aK6BJKRNHj1Nth0YLOzb3iRuhlz4gRzNSBSd7hga6U8BE6o0SoSuSkqv+PPtt511Msd1Hkl0w==",
11122
"license": "MIT",
11123
"dependencies": {
11124
"emoji-regex-xs": "^1.0.0",
@@ -11235,9 +11438,9 @@
11438
}
11439
},
11440
"node_modules/pathe": {
11238
- "version": "1.1.2",
11239
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
11240
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
11441
+ "version": "2.0.1",
11442
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.1.tgz",
11443
+ "integrity": "sha512-6jpjMpOth5S9ITVu5clZ7NOgHNsv5vRQdheL9ztp2vZmM6fRbLvyua1tiBIL4lk8SAe3ARzeXEly6siXCjDHDw==",
11444
"license": "MIT"
11445
},
11446
"node_modules/pathval": {
@@ -11379,14 +11582,14 @@
11582
}
11583
},
11584
"node_modules/pkg-types": {
11382
- "version": "1.3.0",
11383
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.0.tgz",
11384
- "integrity": "sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==",
11585
+ "version": "1.3.1",
11586
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
11587
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
11588
"license": "MIT",
11589
"dependencies": {
11590
"confbox": "^0.1.8",
11388
- "mlly": "^1.7.3",
11389
- "pathe": "^1.1.2"
11591
+ "mlly": "^1.7.4",
11592
+ "pathe": "^2.0.1"
11593
}
11594
},
11595
"node_modules/please-upgrade-node": {
@@ -11445,9 +11648,9 @@
11648
}
11649
},
11650
"node_modules/postcss": {
11448
- "version": "8.4.49",
11449
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
11450
- "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
11651
+ "version": "8.5.1",
11652
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
11653
+ "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
11654
"funding": [
11655
{
11656
"type": "opencollective",
@@ -11464,7 +11667,7 @@
11667
],
11668
"license": "MIT",
11669
"dependencies": {
11467
- "nanoid": "^3.3.7",
11670
+ "nanoid": "^3.3.8",
11671
"picocolors": "^1.1.1",
11672
"source-map-js": "^1.2.1"
11673
},
@@ -11632,9 +11835,9 @@
11835
}
11836
},
11837
"node_modules/prettier-plugin-tailwindcss": {
11635
- "version": "0.6.9",
11636
- "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.9.tgz",
11637
- "integrity": "sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==",
11838
+ "version": "0.6.10",
11839
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.10.tgz",
11840
+ "integrity": "sha512-ndj2WLDaMzACnr1gAYZiZZLs5ZdOeBYgOsbBmHj3nvW/6q8h8PymsXiEnKvj/9qgCCAoHyvLOisoQdIcsDvIgw==",
11841
"dev": true,
11842
"license": "MIT",
11843
"engines": {
@@ -11645,7 +11848,7 @@
11848
"@prettier/plugin-pug": "*",
11849
"@shopify/prettier-plugin-liquid": "*",
11850
"@trivago/prettier-plugin-sort-imports": "*",
11648
- "@zackad/prettier-plugin-twig-melody": "*",
11851
+ "@zackad/prettier-plugin-twig": "*",
11852
"prettier": "^3.0",
11853
"prettier-plugin-astro": "*",
11854
"prettier-plugin-css-order": "*",
@@ -11672,7 +11875,7 @@
11875
"@trivago/prettier-plugin-sort-imports": {
11876
"optional": true
11877
},
11675
- "@zackad/prettier-plugin-twig-melody": {
11878
+ "@zackad/prettier-plugin-twig": {
11879
"optional": true
11880
},
11881
"prettier-plugin-astro": {
@@ -12356,9 +12559,9 @@
12559
"license": "MIT"
12560
},
12561
"node_modules/rollup": {
12359
- "version": "4.30.0",
12360
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.0.tgz",
12361
- "integrity": "sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==",
12562
+ "version": "4.30.1",
12563
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz",
12564
+ "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==",
12565
"devOptional": true,
12566
"license": "MIT",
12567
"dependencies": {
@@ -12372,25 +12575,25 @@
12575
"npm": ">=8.0.0"
12576
},
12577
"optionalDependencies": {
12375
- "@rollup/rollup-android-arm-eabi": "4.30.0",
12376
- "@rollup/rollup-android-arm64": "4.30.0",
12377
- "@rollup/rollup-darwin-arm64": "4.30.0",
12378
- "@rollup/rollup-darwin-x64": "4.30.0",
12379
- "@rollup/rollup-freebsd-arm64": "4.30.0",
12380
- "@rollup/rollup-freebsd-x64": "4.30.0",
12381
- "@rollup/rollup-linux-arm-gnueabihf": "4.30.0",
12382
- "@rollup/rollup-linux-arm-musleabihf": "4.30.0",
12383
- "@rollup/rollup-linux-arm64-gnu": "4.30.0",
12384
- "@rollup/rollup-linux-arm64-musl": "4.30.0",
12385
- "@rollup/rollup-linux-loongarch64-gnu": "4.30.0",
12386
- "@rollup/rollup-linux-powerpc64le-gnu": "4.30.0",
12387
- "@rollup/rollup-linux-riscv64-gnu": "4.30.0",
12388
- "@rollup/rollup-linux-s390x-gnu": "4.30.0",
12389
- "@rollup/rollup-linux-x64-gnu": "4.30.0",
12390
- "@rollup/rollup-linux-x64-musl": "4.30.0",
12391
- "@rollup/rollup-win32-arm64-msvc": "4.30.0",
12392
- "@rollup/rollup-win32-ia32-msvc": "4.30.0",
12393
- "@rollup/rollup-win32-x64-msvc": "4.30.0",
12578
+ "@rollup/rollup-android-arm-eabi": "4.30.1",
12579
+ "@rollup/rollup-android-arm64": "4.30.1",
12580
+ "@rollup/rollup-darwin-arm64": "4.30.1",
12581
+ "@rollup/rollup-darwin-x64": "4.30.1",
12582
+ "@rollup/rollup-freebsd-arm64": "4.30.1",
12583
+ "@rollup/rollup-freebsd-x64": "4.30.1",
12584
+ "@rollup/rollup-linux-arm-gnueabihf": "4.30.1",
12585
+ "@rollup/rollup-linux-arm-musleabihf": "4.30.1",
12586
+ "@rollup/rollup-linux-arm64-gnu": "4.30.1",
12587
+ "@rollup/rollup-linux-arm64-musl": "4.30.1",
12588
+ "@rollup/rollup-linux-loongarch64-gnu": "4.30.1",
12589
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1",
12590
+ "@rollup/rollup-linux-riscv64-gnu": "4.30.1",
12591
+ "@rollup/rollup-linux-s390x-gnu": "4.30.1",
12592
+ "@rollup/rollup-linux-x64-gnu": "4.30.1",
12593
+ "@rollup/rollup-linux-x64-musl": "4.30.1",
12594
+ "@rollup/rollup-win32-arm64-msvc": "4.30.1",
12595
+ "@rollup/rollup-win32-ia32-msvc": "4.30.1",
12596
+ "@rollup/rollup-win32-x64-msvc": "4.30.1",
12597
"fsevents": "~2.3.2"
12598
}
12599
},
@@ -12444,9 +12647,9 @@
12647
}
12648
},
12649
"node_modules/rrweb-cssom": {
12447
- "version": "0.7.1",
12448
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
12449
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
12650
+ "version": "0.8.0",
12651
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
12652
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
12653
"dev": true,
12654
"license": "MIT"
12655
},
@@ -12543,9 +12746,9 @@
12746
"license": "MIT"
12747
},
12748
"node_modules/sass": {
12546
- "version": "1.83.1",
12547
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz",
12548
- "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==",
12749
+ "version": "1.83.4",
12750
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
12751
+ "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
12752
"dev": true,
12753
"license": "MIT",
12754
"dependencies": {
@@ -12677,17 +12880,17 @@
12880
}
12881
},
12882
"node_modules/shiki": {
12680
- "version": "1.26.1",
12681
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.26.1.tgz",
12682
- "integrity": "sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==",
12883
+ "version": "1.27.2",
12884
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.27.2.tgz",
12885
+ "integrity": "sha512-QtA1C41oEVixKog+V8I3ia7jjGls7oCZ8Yul8vdHrVBga5uPoyTtMvFF4lMMXIyAZo5A5QbXq91bot2vA6Q+eQ==",
12886
"license": "MIT",
12887
"dependencies": {
12685
- "@shikijs/core": "1.26.1",
12686
- "@shikijs/engine-javascript": "1.26.1",
12687
- "@shikijs/engine-oniguruma": "1.26.1",
12688
- "@shikijs/langs": "1.26.1",
12689
- "@shikijs/themes": "1.26.1",
12690
- "@shikijs/types": "1.26.1",
12888
+ "@shikijs/core": "1.27.2",
12889
+ "@shikijs/engine-javascript": "1.27.2",
12890
+ "@shikijs/engine-oniguruma": "1.27.2",
12891
+ "@shikijs/langs": "1.27.2",
12892
+ "@shikijs/themes": "1.27.2",
12893
+ "@shikijs/types": "1.27.2",
12894
"@shikijs/vscode-textmate": "^10.0.1",
12895
"@types/hast": "^3.0.4"
12896
}
@@ -12914,9 +13117,9 @@
13117
}
13118
},
13119
"node_modules/spdx-license-ids": {
12917
- "version": "3.0.20",
12918
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
12919
- "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
13120
+ "version": "3.0.21",
13121
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
13122
+ "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
13123
"dev": true,
13124
"license": "CC0-1.0"
13125
},
@@ -12991,9 +13194,9 @@
13194
"license": "MIT"
13195
},
13196
"node_modules/start-server-and-test": {
12994
- "version": "2.0.9",
12995
- "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.9.tgz",
12996
- "integrity": "sha512-DDceIvc4wdpr+z3Aqkot2QMho8TcUBh5qH0wEHDpEexBTzlheOcmh53d3dExABY4J5C7qS2UbSXqRWLtxpbWIQ==",
13197
+ "version": "2.0.10",
13198
+ "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.10.tgz",
13199
+ "integrity": "sha512-nZphcfcqGqwk74lbZkqSwClkYz+M5ZPGOMgWxNVJrdztPKN96qe6HooRu6L3TpwITn0lKJJdKACqHbJtqythOQ==",
13200
"dev": true,
13201
"license": "MIT",
13202
"dependencies": {
@@ -13004,7 +13207,7 @@
13207
"execa": "5.1.1",
13208
"lazy-ass": "1.6.0",
13209
"ps-tree": "1.2.0",
13007
- "wait-on": "8.0.1"
13210
+ "wait-on": "8.0.2"
13211
},
13212
"bin": {
13213
"server-test": "src/bin/start.js",
@@ -13535,17 +13738,17 @@
13738
"license": "ISC"
13739
},
13740
"node_modules/taze": {
13538
- "version": "0.18.0",
13539
- "resolved": "https://registry.npmjs.org/taze/-/taze-0.18.0.tgz",
13540
- "integrity": "sha512-aL8g+4tZvfhsn147u9dRP2eUE2MV+HfJe1sAtSJp46b0Gd8AjyqlJ2uDwnJfM1XNv301Mvh98RkXQw27sco5tQ==",
13741
+ "version": "18.2.0",
13742
+ "resolved": "https://registry.npmjs.org/taze/-/taze-18.2.0.tgz",
13743
+ "integrity": "sha512-rjKW+/AJ8KTBl27cyCo6jtk6j9r3axN8olOOBhA12UciMLDXn79wZG09Nb3t1r51m1pqV8nOz98vKaFDerTe2g==",
13744
"dev": true,
13745
"license": "MIT",
13746
"dependencies": {
13544
- "@antfu/ni": "^0.23.0",
13747
+ "@antfu/ni": "^23.2.0",
13748
"js-yaml": "^4.1.0",
13749
"ofetch": "^1.4.1",
13547
- "package-manager-detector": "^0.2.2",
13548
- "tinyexec": "^0.3.1",
13750
+ "package-manager-detector": "^0.2.8",
13751
+ "tinyexec": "^0.3.2",
13752
"unconfig": "^0.6.0",
13753
"yargs": "^17.7.2"
13754
},
@@ -13659,22 +13862,22 @@
13862
}
13863
},
13864
"node_modules/tldts": {
13662
- "version": "6.1.71",
13663
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.71.tgz",
13664
- "integrity": "sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==",
13865
+ "version": "6.1.72",
13866
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.72.tgz",
13867
+ "integrity": "sha512-QNtgIqSUb9o2CoUjX9T5TwaIvUUJFU1+12PJkgt42DFV2yf9J6549yTF2uGloQsJ/JOC8X+gIB81ind97hRiIQ==",
13868
"dev": true,
13869
"license": "MIT",
13870
"dependencies": {
13668
- "tldts-core": "^6.1.71"
13871
+ "tldts-core": "^6.1.72"
13872
},
13873
"bin": {
13874
"tldts": "bin/cli.js"
13875
}
13876
},
13877
"node_modules/tldts-core": {
13675
- "version": "6.1.71",
13676
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.71.tgz",
13677
- "integrity": "sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==",
13878
+ "version": "6.1.72",
13879
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.72.tgz",
13880
+ "integrity": "sha512-FW3H9aCaGTJ8l8RVCR3EX8GxsxDbQXuwetwwgXA2chYdsX+NY1ytCBl61narjjehWmCw92tc1AxlcY3668CU8g==",
13881
"dev": true,
13882
"license": "MIT"
13883
},
@@ -13750,9 +13953,9 @@
13953
}
13954
},
13955
"node_modules/tough-cookie": {
13753
- "version": "5.0.0",
13754
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
13755
- "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
13956
+ "version": "5.1.0",
13957
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz",
13958
+ "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==",
13959
"dev": true,
13960
"license": "BSD-3-Clause",
13961
"dependencies": {
@@ -14338,9 +14541,9 @@
14541
}
14542
},
14543
"node_modules/type-fest": {
14341
- "version": "4.31.0",
14342
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz",
14343
- "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==",
14544
+ "version": "4.32.0",
14545
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.32.0.tgz",
14546
+ "integrity": "sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==",
14547
"dev": true,
14548
"license": "(MIT OR CC0-1.0)",
14549
"engines": {
@@ -14365,9 +14568,9 @@
14568
}
14569
},
14570
"node_modules/typescript": {
14368
- "version": "5.7.2",
14369
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
14370
- "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
14571
+ "version": "5.7.3",
14572
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
14573
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
14574
"devOptional": true,
14575
"license": "Apache-2.0",
14576
"bin": {
@@ -14446,25 +14649,25 @@
14649
}
14650
},
14651
"node_modules/unimport": {
14449
- "version": "3.14.5",
14450
- "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.5.tgz",
14451
- "integrity": "sha512-tn890SwFFZxqaJSKQPPd+yygfKSATbM8BZWW1aCR2TJBTs1SDrmLamBueaFtYsGjHtQaRgqEbQflOjN2iW12gA==",
14652
+ "version": "3.14.6",
14653
+ "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz",
14654
+ "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==",
14655
"license": "MIT",
14656
"dependencies": {
14454
- "@rollup/pluginutils": "^5.1.3",
14657
+ "@rollup/pluginutils": "^5.1.4",
14658
"acorn": "^8.14.0",
14659
"escape-string-regexp": "^5.0.0",
14660
"estree-walker": "^3.0.3",
14458
- "fast-glob": "^3.3.2",
14459
- "local-pkg": "^0.5.1",
14460
- "magic-string": "^0.30.14",
14461
- "mlly": "^1.7.3",
14462
- "pathe": "^1.1.2",
14661
+ "fast-glob": "^3.3.3",
14662
+ "local-pkg": "^1.0.0",
14663
+ "magic-string": "^0.30.17",
14664
+ "mlly": "^1.7.4",
14665
+ "pathe": "^2.0.1",
14666
"picomatch": "^4.0.2",
14464
- "pkg-types": "^1.2.1",
14667
+ "pkg-types": "^1.3.0",
14668
"scule": "^1.3.0",
14669
"strip-literal": "^2.1.1",
14467
- "unplugin": "^1.16.0"
14670
+ "unplugin": "^1.16.1"
14671
}
14672
},
14673
"node_modules/unimport/node_modules/escape-string-regexp": {
@@ -14489,9 +14692,9 @@
14692
}
14693
},
14694
"node_modules/unimport/node_modules/unplugin": {
14492
- "version": "1.16.0",
14493
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.0.tgz",
14494
- "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==",
14695
+ "version": "1.16.1",
14696
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz",
14697
+ "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==",
14698
"license": "MIT",
14699
"dependencies": {
14700
"acorn": "^8.14.0",
@@ -14592,82 +14795,6 @@
14795
"node": ">=18.12.0"
14796
}
14797
},
14595
- "node_modules/unplugin-vue-components": {
14596
- "version": "0.28.0",
14597
- "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.28.0.tgz",
14598
- "integrity": "sha512-jiTGtJ3JsRFBjgvyilfrX7yUoGKScFgbdNw+6p6kEXU+Spf/rhxzgvdfuMcvhCcLmflB/dY3pGQshYBVGOUx7Q==",
14599
- "dev": true,
14600
- "license": "MIT",
14601
- "dependencies": {
14602
- "@antfu/utils": "^0.7.10",
14603
- "@rollup/pluginutils": "^5.1.4",
14604
- "chokidar": "^3.6.0",
14605
- "debug": "^4.4.0",
14606
- "fast-glob": "^3.3.2",
14607
- "local-pkg": "^0.5.1",
14608
- "magic-string": "^0.30.15",
14609
- "minimatch": "^9.0.5",
14610
- "mlly": "^1.7.3",
14611
- "unplugin": "^2.1.0"
14612
- },
14613
- "engines": {
14614
- "node": ">=14"
14615
- },
14616
- "funding": {
14617
- "url": "https://github.com/sponsors/antfu"
14618
- },
14619
- "peerDependencies": {
14620
- "@babel/parser": "^7.15.8",
14621
- "@nuxt/kit": "^3.2.2",
14622
- "vue": "2 || 3"
14623
- },
14624
- "peerDependenciesMeta": {
14625
- "@babel/parser": {
14626
- "optional": true
14627
- },
14628
- "@nuxt/kit": {
14629
- "optional": true
14630
- }
14631
- }
14632
- },
14633
- "node_modules/unplugin-vue-components/node_modules/chokidar": {
14634
- "version": "3.6.0",
14635
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
14636
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
14637
- "dev": true,
14638
- "license": "MIT",
14639
- "dependencies": {
14640
- "anymatch": "~3.1.2",
14641
- "braces": "~3.0.2",
14642
- "glob-parent": "~5.1.2",
14643
- "is-binary-path": "~2.1.0",
14644
- "is-glob": "~4.0.1",
14645
- "normalize-path": "~3.0.0",
14646
- "readdirp": "~3.6.0"
14647
- },
14648
- "engines": {
14649
- "node": ">= 8.10.0"
14650
- },
14651
- "funding": {
14652
- "url": "https://paulmillr.com/funding/"
14653
- },
14654
- "optionalDependencies": {
14655
- "fsevents": "~2.3.2"
14656
- }
14657
- },
14658
- "node_modules/unplugin-vue-components/node_modules/glob-parent": {
14659
- "version": "5.1.2",
14660
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
14661
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
14662
- "dev": true,
14663
- "license": "ISC",
14664
- "dependencies": {
14665
- "is-glob": "^4.0.1"
14666
- },
14667
- "engines": {
14668
- "node": ">= 6"
14669
- }
14670
- },
14798
"node_modules/untildify": {
14799
"version": "4.0.0",
14800
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
@@ -14698,9 +14825,9 @@
14825
}
14826
},
14827
"node_modules/update-browserslist-db": {
14701
- "version": "1.1.1",
14702
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
14703
- "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
14828
+ "version": "1.1.2",
14829
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
14830
+ "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
14831
"funding": [
14832
{
14833
"type": "opencollective",
@@ -14718,7 +14845,7 @@
14845
"license": "MIT",
14846
"dependencies": {
14847
"escalade": "^3.2.0",
14721
- "picocolors": "^1.1.0"
14848
+ "picocolors": "^1.1.1"
14849
},
14850
"bin": {
14851
"update-browserslist-db": "cli.js"
@@ -15406,6 +15533,13 @@
15533
"@esbuild/win32-x64": "0.21.5"
15534
}
15535
},
15536
+ "node_modules/vite-node/node_modules/pathe": {
15537
+ "version": "1.1.2",
15538
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
15539
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
15540
+ "dev": true,
15541
+ "license": "MIT"
15542
+ },
15543
"node_modules/vite-node/node_modules/vite": {
15544
"version": "5.4.11",
15545
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -15547,18 +15681,18 @@
15681
}
15682
},
15683
"node_modules/vite-plugin-vue-devtools": {
15550
- "version": "7.6.8",
15551
- "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.6.8.tgz",
15552
- "integrity": "sha512-32aIps8C1Y7UEoqyWf+ES3J1OozsCYMIqTqd+I5qass+R0Tcf8SaA2bX1/rskAzkcKCteVoBjEENmqwTcMebbw==",
15684
+ "version": "7.7.0",
15685
+ "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.0.tgz",
15686
+ "integrity": "sha512-1dWiREwIl4JELwXGHXih80hIgjcViMcZGr3j0edo6NQ9kNzAOxMIUgFqc/TO1ary4ZroJUxoB0YDI6jnDf13iQ==",
15687
"dev": true,
15688
"license": "MIT",
15689
"dependencies": {
15556
- "@vue/devtools-core": "^7.6.8",
15557
- "@vue/devtools-kit": "^7.6.8",
15558
- "@vue/devtools-shared": "^7.6.8",
15690
+ "@vue/devtools-core": "^7.7.0",
15691
+ "@vue/devtools-kit": "^7.7.0",
15692
+ "@vue/devtools-shared": "^7.7.0",
15693
"execa": "^9.5.1",
15694
"sirv": "^3.0.0",
15561
- "vite-plugin-inspect": "~0.8.9",
15695
+ "vite-plugin-inspect": "0.8.9",
15696
"vite-plugin-vue-inspector": "^5.3.1"
15697
},
15698
"engines": {
@@ -16313,6 +16447,13 @@
16447
"@types/estree": "^1.0.0"
16448
}
16449
},
16450
+ "node_modules/vitest/node_modules/pathe": {
16451
+ "version": "1.1.2",
16452
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
16453
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
16454
+ "dev": true,
16455
+ "license": "MIT"
16456
+ },
16457
"node_modules/vitest/node_modules/vite": {
16458
"version": "5.4.11",
16459
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -16686,13 +16827,13 @@
16827
}
16828
},
16829
"node_modules/wait-on": {
16689
- "version": "8.0.1",
16690
- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz",
16691
- "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==",
16830
+ "version": "8.0.2",
16831
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.2.tgz",
16832
+ "integrity": "sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==",
16833
"dev": true,
16834
"license": "MIT",
16835
"dependencies": {
16695
- "axios": "^1.7.7",
16836
+ "axios": "^1.7.9",
16837
"joi": "^17.13.3",
16838
"lodash": "^4.17.21",
16839
"minimist": "^1.2.8",
frontend/package.json
+19
-36
@@ -13,15 +13,14 @@
13
"build-only": "vite build",
14
"build-analyzer": "vite-bundle-visualizer -t sunburst",
15
"build-check": "run-s libs-reload build lint type-check format test:e2e test:unit",
16
- "pre-merge": "run-s lint type-check format",
16
"preview": "vite build && echo '' && vite preview --port 4173 --host",
17
"preview-only": "vite preview --port 4173 --host",
18
"test:unit": "vitest",
19
"test:e2e": "start-server-and-test preview http://localhost:4173 'cypress run --e2e'",
20
"test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'",
21
"type-check": "vue-tsc --build --force",
23
- "format": "prettier --write src/",
22
"lint": "eslint . --fix",
23
+ "format": "prettier --write src/",
24
"lint-format": "run-s lint type-check format",
25
"tailwind-config-viewer": "tailwind-config-viewer -o",
26
"design-tokens": "node scripts/tokens-tool.js",
@@ -41,9 +40,9 @@
40
"@fontsource/jetbrains-mono": "^5.1.2",
41
"@fontsource/lexend": "^5.1.2",
42
"@fontsource/public-sans": "^5.1.2",
44
- "@shikijs/markdown-it": "^1.26.1",
43
+ "@shikijs/markdown-it": "^1.27.2",
44
"@tailwindcss/container-queries": "^0.1.1",
46
- "@vueuse/core": "^12.3.0",
45
+ "@vueuse/core": "^12.4.0",
46
"axios": "^1.7.9",
47
"bytes": "^3.1.2",
48
"colord": "^2.9.3",
@@ -62,7 +61,7 @@
61
"pinia": "^2.3.0",
62
"pinia-plugin-persistedstate": "^4.2.0",
63
"secure-ls": "^2.0.0",
65
- "shiki": "^1.26.1",
64
+ "shiki": "^1.27.2",
65
"validator": "^13.12.0",
66
"vue": "^3.5.13",
67
"vue-advanced-cropper": "^2.8.9",
@@ -75,11 +74,13 @@
74
"vuedraggable": "^4.1.0"
75
},
76
"optionalDependencies": {
78
- "@rollup/rollup-linux-x64-gnu": "^4.30.0"
77
+ "@rollup/rollup-linux-x64-gnu": "^4.30.1",
78
+ "treemate": "^0.3.11",
79
+ "vueuc": "^0.4.64"
80
},
81
"devDependencies": {
81
- "@antfu/eslint-config": "^3.12.1",
82
- "@clack/prompts": "^0.9.0",
82
+ "@antfu/eslint-config": "^3.14.0",
83
+ "@clack/prompts": "^0.9.1",
84
"@iconify/vue": "^4.3.0",
85
"@tsconfig/node20": "^20.1.4",
86
"@types/bytes": "^3.1.5",
@@ -87,7 +88,7 @@
88
"@types/fs-extra": "^11.0.4",
89
"@types/jsdom": "^21.1.7",
90
"@types/lodash": "^4.17.14",
90
- "@types/node": "^22.10.5",
91
+ "@types/node": "^22.10.6",
92
"@types/validator": "^13.12.2",
93
"@vitejs/plugin-vue": "^5.2.1",
94
"@vitejs/plugin-vue-jsx": "^4.1.1",
@@ -96,44 +97,26 @@
97
"autoprefixer": "^10.4.20",
98
"cypress": "^13.17.0",
99
"depcheck": "^1.4.7",
99
- "eslint": "^9.17.0",
100
+ "eslint": "^9.18.0",
101
"flourite": "^1.3.0",
102
"fs-extra": "^11.2.0",
102
- "jsdom": "^25.0.1",
103
+ "jsdom": "^26.0.0",
104
"npm-run-all2": "^7.0.2",
104
- "postcss": "^8.4.49",
105
+ "postcss": "^8.5.1",
106
"prettier": "^3.4.2",
107
"prettier-plugin-tailwindcss": "^0.6.9",
107
- "sass": "^1.83.1",
108
- "start-server-and-test": "^2.0.9",
108
+ "sass": "^1.83.4",
109
+ "start-server-and-test": "^2.0.10",
110
"tailwind-config-viewer": "^2.0.4",
111
"tailwindcss": "^3.4.17",
111
- "taze": "^0.18.0",
112
- "type-fest": "^4.31.0",
113
- "typescript": "~5.7.2",
112
+ "taze": "^18.2.0",
113
+ "type-fest": "^4.32.0",
114
+ "typescript": "~5.7.3",
115
"vite": "^6.0.7",
116
"vite-bundle-visualizer": "^1.2.1",
116
- "vite-plugin-vue-devtools": "^7.6.8",
117
+ "vite-plugin-vue-devtools": "^7.7.0",
118
"vite-svg-loader": "^5.1.0",
119
"vitest": "^2.1.8",
120
"vue-tsc": "^2.2.0"
120
- },
121
- "pnpm": {
122
- "overrides": {
123
- "@typescript-eslint/eslint-plugin": "^8.19.1",
124
- "@typescript-eslint/eslint-plugin>eslint": "$eslint",
125
- "@typescript-eslint/parser": "^8.19.1",
126
- "@typescript-eslint/parser>eslint": "$eslint",
127
- "eslint": "$eslint"
128
- }
129
- },
130
- "overrides": {
131
- "@typescript-eslint/eslint-plugin": {
132
- "eslint": "^9.17.0"
133
- },
134
- "@typescript-eslint/parser": {
135
- "eslint": "^9.17.0"
136
- },
137
- "@typescript-eslint/typescript-estree": "^8.19.1"
121
}
122
}
frontend/scripts/tokens-tool.js
+42
-12
@@ -2,12 +2,14 @@ import os from "node:os"
2
import path from "node:path"
3
import process from "node:process"
4
import { cancel, intro, isCancel, outro, select, spinner, text } from "@clack/prompts"
5
+import { colord } from "colord"
6
import fs from "fs-extra"
7
import _ from "lodash"
8
8
-const GLOBAL_KEYS = ["border-radius", "line-heights", "font-sizes", "font-families"]
9
+const GLOBAL_KEYS = ["border-radius", "line-heights", "font-sizes", "font-families", "font-weights"]
10
const TYPO_KEYS = ["typo"]
10
-const SET_KEYS = ["color"]
11
+const COLOR_KEYS = ["color"]
12
+const COLOR_OPACITY_LIST = [] // [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]
13
const TOKENS_MAP = [
14
{
15
token: "colors",
@@ -17,6 +19,10 @@ const TOKENS_MAP = [
19
token: "fontFamily",
20
type: "fontFamilies"
21
},
22
+ {
23
+ token: "fontWeight",
24
+ type: "fontWeights"
25
+ },
26
{
27
token: "fontSize",
28
type: "fontSizes"
@@ -79,7 +85,7 @@ async function importTokens(tokensPath) {
85
const projectFile = {}
86
87
const globalTokens = tokens.global
82
- const setTokens = [
88
+ const colorTokens = [
89
{ key: "light", value: tokens.light },
90
{ key: "dark", value: tokens.dark }
91
]
@@ -121,14 +127,15 @@ async function importTokens(tokensPath) {
127
}
128
}
129
124
- for (const set of setTokens) {
130
+ for (const set of colorTokens) {
131
const setName = set.key
132
const group = set.value
133
134
for (const k in group) {
129
- for (const sk of SET_KEYS) {
130
- const kIndex = k.indexOf(sk)
131
- if (kIndex !== -1) {
135
+ for (const sk of COLOR_KEYS) {
136
+ const regex = /-\d{3}$/
137
+ // exclude opacity variants
138
+ if (k.includes(sk) && !regex.test(k)) {
139
const skParsed = tokenNameSanitize(_.camelCase(sk), "type")
140
const name = _.camelCase(k.replace(`${sk}-`, ""))
141
let value = group[k].value
@@ -141,6 +148,8 @@ async function importTokens(tokensPath) {
148
}
149
}
150
151
+ value = colord(value).toRgbString()
152
+
153
_.set(projectFile, `${skParsed}.${setName}.${name}`, value)
154
}
155
}
@@ -172,7 +181,7 @@ async function exportTokens() {
181
}
182
183
const globalTokens = groups.filter(o => !["colors", "typography"].includes(o.key))
175
- const setsTokens = groups.filter(o => ["colors"].includes(o.key))
184
+ const colorTokens = groups.filter(o => ["colors"].includes(o.key))
185
const typoTokens = groups.filter(o => ["typography"].includes(o.key))
186
187
for (const group of globalTokens) {
@@ -188,7 +197,7 @@ async function exportTokens() {
197
}
198
}
199
191
- for (const group of setsTokens) {
200
+ for (const group of colorTokens) {
201
const type = tokenNameSanitize(group.key, "token")
202
const set = group.value
203
@@ -197,8 +206,10 @@ async function exportTokens() {
206
const globalName = _.kebabCase(`${type}-${setName}-${name}`)
207
const tokenName = _.kebabCase(`${type}-${name}`)
208
209
+ const value = colord(set[setName][name]).toRgbString()
210
+
211
exportFile.global[globalName] = {
201
- value: set[setName][name],
212
+ value,
213
type
214
}
215
@@ -206,6 +217,25 @@ async function exportTokens() {
217
value: `{${globalName}}`,
218
type
219
}
220
+
221
+ for (const opacity of COLOR_OPACITY_LIST) {
222
+ const opacityName = opacity.toString().padStart(3, "0")
223
+ const globalNameOpacity = _.kebabCase(`${type}-${setName}-${name}-${opacityName}`)
224
+ const tokenNameOpacity = _.kebabCase(`${type}-${name}-${opacityName}`)
225
+ const valueOpacity = colord(value)
226
+ .alpha(opacity / 100)
227
+ .toRgbString()
228
+
229
+ exportFile.global[globalNameOpacity] = {
230
+ value: valueOpacity,
231
+ type
232
+ }
233
+
234
+ exportFile[setName][tokenNameOpacity] = {
235
+ value: `{${globalNameOpacity}}`,
236
+ type
237
+ }
238
+ }
239
}
240
}
241
}
@@ -232,9 +262,9 @@ async function exportTokens() {
262
}
263
264
// sanitize lineHeight for figma
235
- if (value.fontSize && tokens?.lineHeight?.base) {
265
+ if (value.fontSize && tokens?.lineHeight?.default) {
266
newValue.lineHeight = Math.round(
237
- Number.parseInt(getValue(tokens, value.fontSize)) * Number.parseFloat(tokens.lineHeight.base)
267
+ Number.parseInt(getValue(tokens, value.fontSize)) * Number.parseFloat(tokens.lineHeight.default)
268
).toString()
269
}
270
frontend/src/App.vue
+17
-14
@@ -2,15 +2,17 @@
2
<Provider>
3
<component
4
:is="layoutComponent"
5
- :class="[`theme-${themeName}`, `layout-${layoutComponentName}`, themeName, { 'opacity-0': loading }]"
5
+ id="app-layout"
6
+ :class="[
7
+ `theme-${themeName}`,
8
+ `layout-${layoutComponentName}`,
9
+ `route-${routeName}`,
10
+ { 'opacity-0': loading }
11
+ ]"
12
>
13
<RouterView v-slot="{ Component: RouterComponent }">
14
<transition :name="`router-${routerTransition}`" mode="out-in" appear>
9
- <component
10
- :is="RouterComponent"
11
- :key="(route?.name?.toString() || '') + forceRefresh"
12
- :class="[`theme-${themeName}`, `layout-${layoutComponentName}`, themeName]"
13
- />
15
+ <component :is="RouterComponent" id="app-page" :key="routeName + forceRefresh" />
16
</transition>
17
</RouterView>
18
</component>
@@ -22,10 +24,10 @@
24
25
<script lang="ts" setup>
26
import type { Layout, RouterTransition, ThemeNameEnum } from "@/types/theme.d"
25
-import Blank from "@/app-layouts/Blank/index.vue"
27
+import Blank from "@/app-layouts/Blank"
28
import Provider from "@/app-layouts/common/Provider.vue"
29
import SplashScreen from "@/app-layouts/common/SplashScreen.vue"
28
-import HorizontalNav from "@/app-layouts/HorizontalNav/index.vue"
30
+import HorizontalNav from "@/app-layouts/HorizontalNav"
31
import SearchDialog from "@/components/common/SearchDialog.vue"
32
import { useAuthStore } from "@/stores/auth"
33
import { useMainStore } from "@/stores/main"
@@ -47,6 +49,7 @@ const themeStore = useThemeStore()
49
const mainStore = useMainStore()
50
const authStore = useAuthStore()
51
52
+const routeName = computed<string>(() => route?.name?.toString() || "")
53
const forceRefresh = computed<number>(() => mainStore.forceRefresh)
54
const forceLayout = ref<Layout | null>(null)
55
const layout = computed<Layout>(() => themeStore.layout)
@@ -56,9 +59,9 @@ const routerTransition = computed<RouterTransition>(() => themeStore.routerTrans
59
const themeName = computed<ThemeNameEnum>(() => themeStore.themeName)
60
const isLogged = computed(() => authStore.isLogged)
61
59
-function checkForcedLayout(route: RouteLocationNormalized) {
60
- if (route.meta?.forceLayout) {
61
- forceLayout.value = route.meta.forceLayout
62
+function checkThemeOverrides(currentRoute: RouteLocationNormalized) {
63
+ if (currentRoute.meta?.theme?.layout !== undefined) {
64
+ forceLayout.value = currentRoute.meta.theme.layout
65
} else {
66
forceLayout.value = null
67
}
@@ -68,12 +71,12 @@ watch(layoutComponentName, () => {
71
loading.value = false
72
})
73
71
-router.afterEach(route => {
72
- checkForcedLayout(route)
74
+router.afterEach(currentRoute => {
75
+ checkThemeOverrides(currentRoute)
76
})
77
78
onBeforeMount(() => {
76
- checkForcedLayout(useRoute())
79
+ checkThemeOverrides(route)
80
81
setTimeout(() => {
82
loading.value = false
frontend/src/app-layouts/Blank/Blank.vue
renamed
+2
-1
@@ -8,13 +8,14 @@
8
9
<script lang="ts" setup>
10
import MainContainer from "./MainContainer.vue"
11
+import "./main.scss"
12
</script>
13
14
<style lang="scss" scoped>
15
.layout {
16
width: 100vw;
17
height: 100vh;
17
- height: 100dvh;
18
+ height: 100svh;
19
overflow: hidden;
20
perspective: 1000px;
21
}
frontend/src/app-layouts/Blank/MainContainer.vue
+37
-10
@@ -1,7 +1,11 @@
1
<template>
2
- <div class="main">
2
+ <div id="app-main" class="main">
3
<n-scrollbar ref="scrollbar">
4
- <div class="view" :class="[{ boxed }, `route-${routeName}`]">
4
+ <div
5
+ id="app-view"
6
+ class="view"
7
+ :class="{ boxed, 'view-padded': overridePadded === true, 'view-no-padded': overridePadded === false }"
8
+ >
9
<slot />
10
</div>
11
</n-scrollbar>
@@ -12,16 +16,36 @@
16
import { useThemeStore } from "@/stores/theme"
17
import { NScrollbar } from "naive-ui"
18
import { computed, onMounted, ref } from "vue"
15
-import { useRoute, useRouter } from "vue-router"
19
+import { type RouteLocationNormalizedGeneric, useRoute, useRouter } from "vue-router"
20
21
const themeStore = useThemeStore()
22
const router = useRouter()
23
const route = useRoute()
20
-const routeName = computed<string>(() => route.name?.toString() || "")
21
-const boxed = computed(() => themeStore.isBoxed)
24
+const themeBoxed = computed<boolean>(() => themeStore.isBoxed)
25
+const overrideBoxed = ref<boolean | undefined>(undefined)
26
+const overridePadded = ref<boolean | undefined>(undefined)
27
+const boxed = computed<boolean>(() => (overrideBoxed.value !== undefined ? overrideBoxed.value : themeBoxed.value))
28
const scrollbar = ref()
29
30
+function checkThemeOverrides(currentRoute: RouteLocationNormalizedGeneric) {
31
+ if (currentRoute.meta?.theme?.boxed?.enabled !== undefined) {
32
+ overrideBoxed.value = currentRoute.meta.theme.boxed.enabled
33
+ } else {
34
+ overrideBoxed.value = undefined
35
+ }
36
+
37
+ if (currentRoute.meta?.theme?.padded?.enabled !== undefined) {
38
+ overridePadded.value = currentRoute.meta.theme.padded.enabled
39
+ } else {
40
+ overridePadded.value = undefined
41
+ }
42
+}
43
+
44
+router.beforeEach(checkThemeOverrides)
45
+
46
onMounted(() => {
47
+ checkThemeOverrides(route)
48
+
49
router.afterEach(() => {
50
if (scrollbar?.value?.scrollTo) {
51
scrollbar?.value.scrollTo({ top: 0, behavior: "smooth" })
@@ -34,17 +58,20 @@ onMounted(() => {
58
.main {
59
width: 100%;
60
position: relative;
37
- background-color: var(--bg-body);
61
+ background-color: var(--bg-body-color);
62
39
- /*
63
.view {
41
- padding: var(--view-padding);
64
+ padding: 0 var(--view-padding);
65
+ flex-grow: 1;
66
+ width: 100%;
67
+ margin: 0 auto;
68
69
&.boxed {
70
max-width: var(--boxed-width);
45
- margin: 0 auto;
71
+ }
72
+ &.view-no-padded {
73
+ padding: 0;
74
}
75
}
48
- */
76
}
77
</style>
frontend/src/app-layouts/Blank/index.ts
new
+1
@@ -0,0 +1 @@
1
+export { default } from "./Blank.vue"
frontend/src/app-layouts/Blank/main.scss
new
+8
@@ -0,0 +1,8 @@
1
+.layout-Blank {
2
+ .page-wrapped {
3
+ height: 100svh;
4
+ }
5
+ .page-min-wrapped {
6
+ min-height: 100svh;
7
+ }
8
+}
frontend/src/app-layouts/HorizontalNav/HeaderBar.vue
+3
-3
@@ -9,7 +9,7 @@
9
10
<script lang="ts" setup>
11
import Logo from "@/app-layouts/common/Logo.vue"
12
-import Navbar from "@/app-layouts/common/Navbar/index.vue"
12
+import Navbar from "@/app-layouts/common/Navbar"
13
import { useThemeStore } from "@/stores/theme"
14
import { NScrollbar } from "naive-ui"
15
import { computed } from "vue"
@@ -19,14 +19,14 @@ const isDark = computed<boolean>(() => themeStore.isThemeDark)
19
</script>
20
21
<style lang="scss" scoped>
22
-@import "variables";
22
+@import "./variables";
23
24
.header-bar {
25
padding-left: var(--view-padding);
26
min-height: var(--header-bar-height);
27
height: var(--header-bar-height);
28
max-height: var(--header-bar-height);
29
- background-color: var(--bg-sidebar);
29
+ background-color: var(--bg-sidebar-color);
30
31
:deep(.n-scrollbar-rail) {
32
opacity: 0.15;
frontend/src/app-layouts/HorizontalNav/HorizontalNav.vue
renamed
+1
-1
@@ -19,7 +19,7 @@ import "./main.scss"
19
.layout {
20
width: 100vw;
21
height: 100vh;
22
- height: 100dvh;
22
+ height: 100svh;
23
overflow: hidden;
24
perspective: 1000px;
25
}
frontend/src/app-layouts/HorizontalNav/MainContainer.vue
+61
-43
@@ -1,34 +1,73 @@
1
<template>
2
- <div id="main" class="main" :class="{ 'sidebar-collapsed': sidebarCollapsed, 'sidebar-opened': !sidebarCollapsed }">
3
- <n-scrollbar ref="scrollbar">
2
+ <div
3
+ id="app-main"
4
+ class="main"
5
+ :class="{ 'sidebar-collapsed': sidebarCollapsed, 'sidebar-opened': !sidebarCollapsed }"
6
+ >
7
+ <n-scrollbar
8
+ ref="scrollbar"
9
+ trigger="none"
10
+ :y-placement="isRTL ? 'left' : 'right'"
11
+ content-class="min-h-full flex flex-col"
12
+ :theme-overrides="{
13
+ railInsetVerticalRight: `${toolbarHeight}px 4px 4px auto`,
14
+ railInsetVerticalLeft: `${toolbarHeight}px auto 4px 4px`
15
+ }"
16
+ >
17
<Toolbar :boxed="toolbarBoxed" class="gradient-bg-sidebar" />
5
- <div class="view" :class="[{ boxed }, `route-${routeName}`]">
18
+ <div
19
+ id="app-view"
20
+ class="view"
21
+ :class="{ boxed, 'view-padded': overridePadded === true, 'view-no-padded': overridePadded === false }"
22
+ >
23
<slot />
24
</div>
8
- <MainFooter v-if="footerShown" :boxed="boxed" />
25
+ <MainFooter v-if="footerShown" :boxed />
26
</n-scrollbar>
27
</div>
28
</template>
29
30
<script lang="ts" setup>
31
import MainFooter from "@/app-layouts/common/MainFooter.vue"
15
-import Toolbar from "@/app-layouts/common/Toolbar/index.vue"
32
+import Toolbar from "@/app-layouts/common/Toolbar"
33
import { useThemeStore } from "@/stores/theme"
34
import { NScrollbar } from "naive-ui"
35
import { computed, onMounted, ref } from "vue"
19
-import { useRoute, useRouter } from "vue-router"
36
+import { type RouteLocationNormalizedGeneric, useRoute, useRouter } from "vue-router"
37
38
const themeStore = useThemeStore()
39
const router = useRouter()
40
const route = useRoute()
24
-const routeName = computed<string>(() => route.name?.toString() || "")
41
const sidebarCollapsed = computed<boolean>(() => themeStore.sidebar.collapsed)
42
const footerShown = computed(() => themeStore.isFooterShown)
27
-const boxed = computed<boolean>(() => themeStore.isBoxed)
43
+const themeBoxed = computed<boolean>(() => themeStore.isBoxed)
44
+const overrideBoxed = ref<boolean | undefined>(undefined)
45
+const overridePadded = ref<boolean | undefined>(undefined)
46
+const boxed = computed<boolean>(() => (overrideBoxed.value !== undefined ? overrideBoxed.value : themeBoxed.value))
47
+const isRTL = computed<boolean>(() => themeStore.isRTL)
48
const toolbarBoxed = computed(() => themeStore.isToolbarBoxed)
49
+const toolbarHeight = computed(() => themeStore.toolbarHeight)
50
const scrollbar = ref()
51
52
+function checkThemeOverrides(currentRoute: RouteLocationNormalizedGeneric) {
53
+ if (currentRoute.meta?.theme?.boxed?.enabled !== undefined) {
54
+ overrideBoxed.value = currentRoute.meta.theme.boxed.enabled
55
+ } else {
56
+ overrideBoxed.value = undefined
57
+ }
58
+
59
+ if (currentRoute.meta?.theme?.padded?.enabled !== undefined) {
60
+ overridePadded.value = currentRoute.meta.theme.padded.enabled
61
+ } else {
62
+ overridePadded.value = undefined
63
+ }
64
+}
65
+
66
+router.beforeEach(checkThemeOverrides)
67
+
68
onMounted(() => {
69
+ checkThemeOverrides(route)
70
+
71
router.afterEach(() => {
72
if (scrollbar?.value?.scrollTo) {
73
scrollbar?.value.scrollTo({ top: 0, behavior: "smooth" })
@@ -38,57 +77,36 @@ onMounted(() => {
77
</script>
78
79
<style lang="scss" scoped>
41
-@import "variables";
80
+@import "./variables";
81
82
.main {
83
width: 100%;
45
- height: 100%;
84
overflow: hidden;
47
- position: relative;
48
- transition: padding var(--sidebar-anim-ease) var(--sidebar-anim-duration);
49
- background-color: var(--bg-body);
50
-
51
- :deep() {
52
- & > .n-scrollbar {
53
- & > .n-scrollbar-rail {
54
- top: calc(var(--toolbar-height) + 2px);
55
- }
56
-
57
- & > .n-scrollbar-container {
58
- & > .n-scrollbar-content {
59
- min-height: 100%;
60
- display: flex;
61
- flex-direction: column;
62
- }
63
- }
64
- }
65
- }
85
+ background-color: var(--bg-body-color);
86
+ transition: all var(--sidebar-anim-ease) var(--sidebar-anim-duration);
87
88
.view {
68
- padding: var(--view-padding);
69
- padding-top: 0;
89
+ padding: 0 var(--view-padding);
90
flex-grow: 1;
91
width: 100%;
72
- display: flex;
73
- flex-direction: column;
92
+ margin: 0 auto;
93
94
&.boxed {
95
max-width: var(--boxed-width);
77
- margin: 0 auto;
96
+ }
97
+ &.view-no-padded {
98
+ padding: 0;
99
}
100
}
101
102
@media (max-width: $sidebar-bp) {
82
- transition: all var(--sidebar-anim-ease) var(--sidebar-anim-duration);
83
-
84
- .view {
85
- padding-top: calc(var(--view-padding) / 2);
86
- }
87
-
103
&.sidebar-opened {
89
- //transform: scale(0.8) translateX(100%) rotateY(35deg);
90
- //transform-origin: center left;
91
- //border-radius: 16px;
104
+ /*
105
+ transform: scale(0.8) translateX(100%) rotateY(35deg);
106
+ transform-origin: center left;
107
+ border-radius: 16px;
108
+ */
109
+
110
overflow: hidden;
111
opacity: 0.5;
112
}
frontend/src/app-layouts/HorizontalNav/Sidebar.vue
+5
-8
@@ -1,6 +1,6 @@
1
<template>
2
<aside
3
- id="sidebar"
3
+ id="app-sidebar"
4
class="sidebar flex flex-col"
5
:class="{ collapsed: sidebarCollapsed, opened: !sidebarCollapsed }"
6
>
@@ -15,7 +15,7 @@
15
</template>
16
17
<script lang="ts" setup>
18
-import Navbar from "@/app-layouts/common/Navbar/index.vue"
18
+import Navbar from "@/app-layouts/common/Navbar"
19
import { useThemeStore } from "@/stores/theme"
20
import { isMobile } from "@/utils"
21
import { onClickOutside, useElementHover } from "@vueuse/core"
@@ -62,22 +62,19 @@ onMounted(() => {
62
</script>
63
64
<style lang="scss" scoped>
65
-@import "variables";
65
+@import "./variables";
66
67
.sidebar {
68
position: fixed;
69
z-index: 4;
70
top: 0;
71
left: 0;
72
- //bottom: 0;
73
- //border-right:var(--border-small-100);
74
- //padding-right: 1px;
72
width: var(--sidebar-open-width);
73
height: 100vh;
77
- height: 100dvh;
74
+ height: 100svh;
75
overflow-x: hidden;
76
overflow-y: auto;
80
- background-color: var(--bg-sidebar);
77
+ background-color: var(--bg-sidebar-color);
78
transition:
79
width var(--sidebar-anim-ease) var(--sidebar-anim-duration),
80
box-shadow var(--sidebar-anim-ease) var(--sidebar-anim-duration),
frontend/src/app-layouts/HorizontalNav/SidebarFooter.vue
+1
-1
@@ -37,7 +37,7 @@ const collapsedWidth = computed<number>(() => themeStore.sidebar.closeWidth - 16
37
<style lang="scss" scoped>
38
.sidebar-footer {
39
margin: 8px;
40
- background-color: var(--bg-body);
40
+ background-color: var(--bg-body-color);
41
border-radius: var(--border-radius);
42
padding: 3px 0;
43
transition: all 0.3s;
frontend/src/app-layouts/HorizontalNav/SidebarHeader.vue
+7
-61
@@ -1,12 +1,7 @@
1
<template>
2
- <div class="sidebar-header flex items-center justify-between">
3
- <div class="logo-box grow" :class="{ mini: logoMini }">
4
- <Transition name="fade" mode="out-in">
5
- <Logo v-if="isDark && !logoMini" :mini="false" :dark="true" class="anim-wrap" />
6
- <Logo v-else-if="isLight && !logoMini" :mini="false" :dark="false" class="anim-wrap" />
7
- <Logo v-else-if="isDark && logoMini" :mini="true" :dark="true" class="anim-wrap" />
8
- <Logo v-else-if="isLight && logoMini" :mini="true" :dark="false" class="anim-wrap" />
9
- </Transition>
2
+ <div class="sidebar-header flex items-center justify-between gap-4 px-4">
3
+ <div class="grow">
4
+ <Logo :mini="logoMini" :dark="isDark" />
5
</div>
6
<Transition name="fade" mode="out-in">
7
<div v-if="showPin" class="sidebar-pin flex items-center">
@@ -29,18 +24,17 @@ import Logo from "@/app-layouts/common/Logo.vue"
24
import Icon from "@/components/common/Icon.vue"
25
import { useThemeStore } from "@/stores/theme"
26
import { Icon as Iconify } from "@iconify/vue"
32
-import { computed, toRefs } from "vue"
27
+import { computed } from "vue"
28
34
-const props = defineProps<{
29
+const { logoMini } = defineProps<{
30
logoMini?: boolean
31
}>()
37
-const { logoMini } = toRefs(props)
32
33
const CircleRegular = "fa6-regular:circle"
34
const DotCircleRegular = "fa6-regular:circle-dot"
35
const CloseOutline = "carbon:chevron-left"
36
const themeStore = useThemeStore()
43
-const showPin = computed<boolean>(() => !logoMini.value)
37
+const showPin = computed<boolean>(() => !logoMini)
38
const sidebarCollapsed = computed({
39
get(): boolean {
40
return themeStore.sidebar.collapsed
@@ -50,64 +44,16 @@ const sidebarCollapsed = computed({
44
}
45
})
46
const isDark = computed<boolean>(() => themeStore.isThemeDark)
53
-const isLight = computed(() => themeStore.isThemeLight)
47
</script>
48
49
<style lang="scss" scoped>
57
-@import "variables";
50
+@import "./variables";
51
52
.sidebar-header {
53
height: var(--toolbar-height);
54
min-height: var(--toolbar-height);
55
63
- :deep() {
64
- .logo-box {
65
- height: 100%;
66
- width: 100%;
67
- position: relative;
68
-
69
- .anim-wrap {
70
- padding: 16px 0px;
71
- position: absolute;
72
- top: 0;
73
- left: 0;
74
- right: 0;
75
- bottom: 0;
76
- display: flex;
77
- align-items: center;
78
-
79
- img {
80
- max-height: 32px;
81
- display: block;
82
- height: calc(var(--toolbar-height) - 32px);
83
- transform: translateX(32px);
84
- transition: transform var(--sidebar-anim-ease) var(--sidebar-anim-duration);
85
- }
86
- }
87
-
88
- &.fade-enter-active,
89
- &.fade-leave-active {
90
- transition: opacity var(--sidebar-anim-ease) var(--sidebar-anim-duration);
91
- }
92
-
93
- &.fade-enter-from,
94
- &.fade-leave-to {
95
- opacity: 0;
96
- }
97
- }
98
-
99
- &.mini {
100
- width: 100%;
101
- .anim-wrap {
102
- img {
103
- transform: translateX(22px);
104
- }
105
- }
106
- }
107
- }
108
-
56
.sidebar-pin {
110
- padding-right: 16px;
57
height: 100%;
58
59
:deep() {
frontend/src/app-layouts/HorizontalNav/_mixin.scss
new
+6
@@ -0,0 +1,6 @@
1
+@mixin page-full-view {
2
+ height: calc(100svh - var(--toolbar-height));
3
+ position: relative;
4
+ left: calc(var(--view-padding) * -1);
5
+ width: 100vw;
6
+}
frontend/src/app-layouts/HorizontalNav/index.ts
new
+1
@@ -0,0 +1 @@
1
+export { default } from "./HorizontalNav.vue"
frontend/src/app-layouts/HorizontalNav/main.scss
+25
-9
@@ -1,16 +1,32 @@
1
-@use "variables";
1
+@import "variables";
2
+@import "mixin";
3
3
-.page-wrapped {
4
- @media (min-width: calc(variables.$sidebar-bp + 1px)) {
5
- &.layout-HorizontalNav {
6
- height: calc(100dvh - var(--toolbar-height) - var(--view-padding) - var(--header-bar-height));
4
+.layout-HorizontalNav {
5
+ .page {
6
+ padding-bottom: var(--view-padding);
7
+ }
8
+ .page-wrapped {
9
+ padding-bottom: 0;
10
+ height: calc(100svh - var(--toolbar-height) - var(--view-padding) - var(--header-bar-height));
11
+ }
12
+ .page-min-wrapped {
13
+ padding-bottom: 0;
14
+ min-height: calc(100svh - var(--toolbar-height) - var(--view-padding) - var(--header-bar-height));
15
+ }
16
+ .page-mobile-full {
17
+ @media (max-width: $sidebar-bp) {
18
+ padding-bottom: 0;
19
+ @include page-full-view;
20
}
21
}
22
}
10
-.page-min-wrapped {
11
- @media (min-width: calc(variables.$sidebar-bp + 1px)) {
12
- &.layout-HorizontalNav {
13
- min-height: calc(100dvh - var(--toolbar-height) - var(--view-padding) - var(--header-bar-height));
23
+.direction-rtl {
24
+ .layout-HorizontalNav {
25
+ .page-mobile-full {
26
+ @media (max-width: $sidebar-bp) {
27
+ right: calc(var(--view-padding) * -1);
28
+ left: unset;
29
+ }
30
}
31
}
32
}
frontend/src/app-layouts/common/MainFooter.vue
+6
-14
@@ -1,9 +1,9 @@
1
<template>
2
- <footer class="footer" :class="{ boxed }">
2
+ <footer class="footer py-4" :class="{ boxed }">
3
<div class="wrap flex items-center justify-end gap-3">
4
<div class="copy">
5
Made with
6
- <Icon :size="22" :color="style['primary-color']" class="mx-1">
6
+ <Icon :size="22" class="text-primary mx-1">
7
<BrainIcon />
8
</Icon>
9
By
@@ -25,16 +25,12 @@
25
<script lang="ts" setup>
26
import BrainIcon from "@/assets/icons/brain-icon.svg"
27
import Icon from "@/components/common/Icon.vue"
28
-import { useThemeStore } from "@/stores/theme"
29
-import { computed, ref, toRefs } from "vue"
28
+import { ref } from "vue"
29
31
-const props = defineProps<{
30
+const { boxed } = defineProps<{
31
boxed: boolean
32
}>()
34
-const { boxed } = toRefs(props)
33
36
-const themeStore = useThemeStore()
37
-const style = computed(() => themeStore.style)
34
const year = ref(new Date().getFullYear())
35
</script>
36
@@ -42,8 +38,6 @@ const year = ref(new Date().getFullYear())
38
.footer {
39
width: 100%;
40
max-width: 100%;
45
- padding: var(--view-padding);
46
- padding-top: 0;
41
overflow: hidden;
42
font-size: 13px;
43
@@ -51,6 +45,8 @@ const year = ref(new Date().getFullYear())
45
overflow: hidden;
46
width: 100%;
47
max-width: 100%;
48
+ margin: 0 auto;
49
+ padding: 0 var(--view-padding);
50
51
.copy {
52
line-height: 1.6;
@@ -69,12 +65,8 @@ const year = ref(new Date().getFullYear())
65
}
66
67
&.boxed {
72
- padding: 0;
68
.wrap {
74
- padding: var(--view-padding);
75
- padding-top: 0;
69
max-width: var(--boxed-width);
77
- margin: 0 auto;
70
}
71
}
72
frontend/src/app-layouts/common/Navbar/Navbar.vue
renamed
+14
-12
@@ -4,9 +4,9 @@
4
ref="menu"
5
v-model:value="selectedKey"
6
:options="menuOptions"
7
- :collapsed="collapsed"
7
+ :collapsed
8
:mode
9
- :accordion="true"
9
+ accordion
10
:collapsed-width="collapsedWidth"
11
:dropdown-props="{
12
scrollable: true,
@@ -14,7 +14,7 @@
14
class: 'main-nav'
15
})
16
}"
17
- :expanded-keys="expandedKeys"
17
+ :expanded-keys
18
@update:expanded-keys="handleUpdateExpandedKeys"
19
/>
20
</nav>
@@ -33,6 +33,7 @@ const { mode = "horizontal", collapsed = false } = defineProps<{
33
mode?: "vertical" | "horizontal"
34
collapsed?: boolean
35
}>()
36
+
37
const route = useRoute()
38
const router = useRouter()
39
const selectedKey = ref<string | null>(null)
@@ -116,8 +117,8 @@ function handleUpdateExpandedKeys(value: string[]) {
117
}
118
119
:nth-child(2) {
119
- color: var(--fg-color);
120
- background: var(--hover-005-color);
120
+ color: var(--fg-default-color);
121
+ background: var(--hover-color);
122
height: 22px;
123
line-height: 24px;
124
border-radius: 15px;
@@ -167,7 +168,7 @@ function handleUpdateExpandedKeys(value: string[]) {
168
&::before {
169
content: "";
170
display: block;
170
- background-color: var(--divider-010-color);
171
+ background-color: var(--border-color);
172
width: var(--dash-height);
173
position: absolute;
174
top: 0px;
@@ -179,10 +180,11 @@ function handleUpdateExpandedKeys(value: string[]) {
180
&::after {
181
content: "";
182
display: block;
182
- background-color: var(--divider-010-color);
183
+ background-color: var(--border-color);
184
width: var(--dash-width);
185
height: var(--dash-height);
186
position: absolute;
187
+ z-index: -1;
188
top: calc(50% - calc(ar(--dash-height) / 2));
189
left: calc(var(--dash-offset) + var(--dash-height));
190
}
@@ -203,8 +205,8 @@ function handleUpdateExpandedKeys(value: string[]) {
205
width: calc(var(--dash-width) * 3);
206
background: repeating-linear-gradient(
207
90deg,
206
- var(--divider-010-color) 0px,
207
- var(--divider-010-color) 5px,
208
+ var(--border-color) 0px,
209
+ var(--border-color) 5px,
210
transparent 5px,
211
transparent 8px
212
);
@@ -252,8 +254,8 @@ function handleUpdateExpandedKeys(value: string[]) {
254
}
255
256
:nth-child(2) {
255
- color: var(--fg-color);
256
- background: var(--hover-005-color);
257
+ color: var(--fg-default-color);
258
+ background: var(--hover-color);
259
font-weight: bold;
260
font-family: var(--font-family-mono);
261
font-size: 10px;
@@ -270,7 +272,7 @@ function handleUpdateExpandedKeys(value: string[]) {
272
.item-badge {
273
:nth-child(2) {
274
color: var(--n-item-text-color-active);
273
- background: var(--primary-010-color);
275
+ background: rgba(var(--primary-color-rgb) / 0.1);
276
}
277
}
278
}
frontend/src/app-layouts/common/Navbar/index.ts
new
+1
@@ -0,0 +1 @@
1
+export { default } from "./Navbar.vue"
frontend/src/app-layouts/common/SplashScreen.vue
+1
-3
@@ -8,12 +8,10 @@
8
9
<script lang="ts" setup>
10
import { NSpin } from "naive-ui"
11
-import { toRefs } from "vue"
11
13
-const props = defineProps<{
12
+const { show } = defineProps<{
13
show: boolean
14
}>()
16
-const { show } = toRefs(props)
15
</script>
16
17
<style scoped lang="scss">
frontend/src/app-layouts/common/Toolbar/Notifications.vue
+2
-5
@@ -43,12 +43,9 @@ import { NBadge, NButton, NDrawer, NDrawerContent, NPopover, NText } from "naive
43
import { computed, onBeforeMount, ref } from "vue"
44
45
const BellIcon = "ph:bell"
46
-
46
const themeStore = useThemeStore()
48
-
49
-const primaryColor = computed(() => themeStore.primaryColor)
47
+const primaryColor = computed(() => themeStore.style["primary-color"])
48
const hasUnread = useNotifications().hasUnread
51
-
49
const showDrawer = ref(false)
50
const list = useNotifications().list
51
@@ -61,6 +58,6 @@ onBeforeMount(() => {
58
59
<style lang="scss" scoped>
60
.trigger-icon {
64
- color: var(--fg-color);
61
+ color: var(--fg-default-color);
62
}
63
</style>
frontend/src/app-layouts/common/Toolbar/PinnedPages.vue
+27
-9
@@ -24,9 +24,9 @@
24
<div v-if="pinned.length" class="flex items-center">
25
<n-popover :show-arrow="false" placement="bottom" trigger="hover" class="!p-1">
26
<template #trigger>
27
- <button class="shortcuts-btn flex items-center gap-2">
27
+ <button class="shortcuts-btn flex items-center gap-2 text-sm">
28
<span>Shortcuts</span>
29
- <n-badge :value="pinned.length" color="var(--divider-030-color)" />
29
+ <n-badge :value="pinned.length" />
30
</button>
31
</template>
32
<div class="flex flex-col">
@@ -161,7 +161,7 @@ router.afterEach(route => {
161
162
&.n-tag--closable {
163
&:hover {
164
- background-color: var(--hover-color);
164
+ background-color: var(--bg-sidebar-color);
165
166
&.n-tag--round {
167
padding: 0 calc(var(--n-height) / 3.6) 0 calc(var(--n-height) / 3.6);
@@ -178,19 +178,37 @@ router.afterEach(route => {
178
179
.shortcuts-btn {
180
border-radius: 50px;
181
- background-color: var(--bg-color);
181
+ background-color: var(--bg-sidebar-color);
182
gap: 10px;
183
height: 32px;
184
cursor: pointer;
185
- padding: 0px 8px;
186
- padding-left: 10px;
185
+ padding: 0px 6px;
186
+ padding-left: 12px;
187
outline: none;
188
transition: all 0.2s var(--bezier-ease);
189
- border: none;
189
+ border: 1px solid var(--border-color);
190
191
&:hover {
192
background-color: var(--hover-color);
193
}
194
+
195
+ :deep() {
196
+ .n-badge {
197
+ .n-badge-sup {
198
+ --size: 22px;
199
+ background-color: var(--bg-body-color);
200
+ color: var(--fg-secondary-color);
201
+ font-weight: 700;
202
+ height: var(--size);
203
+ line-height: var(--size);
204
+ min-width: var(--size);
205
+ border-radius: var(--size);
206
+ font-variant-numeric: tabular-nums;
207
+ justify-content: center;
208
+ padding: 0;
209
+ }
210
+ }
211
+ }
212
}
213
214
.page-name {
@@ -246,8 +264,8 @@ router.afterEach(route => {
264
.direction-rtl {
265
.pinned-pages {
266
.shortcuts-btn {
249
- padding-right: 10px;
250
- padding-left: 8px;
267
+ padding-right: 12px;
268
+ padding-left: 6px;
269
}
270
}
271
}
frontend/src/app-layouts/common/Toolbar/Search.vue
+2
-2
@@ -32,7 +32,7 @@ onMounted(() => {
32
<style lang="scss" scoped>
33
.search-btn {
34
border-radius: 50px;
35
- background-color: var(--bg-body);
35
+ background-color: var(--bg-body-color);
36
gap: 10px;
37
height: 32px;
38
cursor: pointer;
@@ -72,7 +72,7 @@ onMounted(() => {
72
73
:deep() {
74
& > code {
75
- background-color: var(--hover-005-color);
75
+ background-color: var(--bg-sidebar-color);
76
border-top-right-radius: 10px;
77
border-bottom-right-radius: 10px;
78
padding-right: 10px;
frontend/src/app-layouts/common/Toolbar/Toolbar.vue
renamed
+36
-37
@@ -25,7 +25,7 @@ import Icon from "@/components/common/Icon.vue"
25
import { useMainStore } from "@/stores/main"
26
import { useThemeStore } from "@/stores/theme"
27
import { useLoadingBar } from "naive-ui"
28
-import { onMounted, toRefs } from "vue"
28
+import { onMounted } from "vue"
29
import { useRouter } from "vue-router"
30
import Logo from "../Logo.vue"
31
import Avatar from "./Avatar.vue"
@@ -36,10 +36,9 @@ import PinnedPages from "./PinnedPages.vue"
36
import Search from "./Search.vue"
37
import ThemeSwitch from "./ThemeSwitch.vue"
38
39
-const props = defineProps<{
39
+const { boxed } = defineProps<{
40
boxed: boolean
41
}>()
42
-const { boxed } = toRefs(props)
42
43
const router = useRouter()
44
const themeStore = useThemeStore()
@@ -97,9 +96,9 @@ onMounted(() => {
96
z-index: 0;
97
98
.bubble {
100
- background-color: var(--bg-sidebar);
101
- border: var(--border-small-050);
102
- color: var(--fg-color);
99
+ background-color: var(--bg-sidebar-color);
100
+ border: 1px solid var(--border-color);
101
+ color: var(--fg-default-color);
102
border-radius: 50px;
103
padding: 6px;
104
transition: all 0.3s;
@@ -139,25 +138,25 @@ onMounted(() => {
138
top: 0;
139
left: 0;
140
z-index: -1;
142
- background-color: var(--bg-sidebar);
141
+ background-color: var(--bg-sidebar-color);
142
background: linear-gradient(
143
to bottom,
145
- rgba(var(--bg-sidebar-rgb), 1) 0%,
146
- rgba(var(--bg-sidebar-rgb), 0.945) 8.6%,
147
- rgba(var(--bg-sidebar-rgb), 0.888) 16.2%,
148
- rgba(var(--bg-sidebar-rgb), 0.83) 22.9%,
149
- rgba(var(--bg-sidebar-rgb), 0.769) 28.9%,
150
- rgba(var(--bg-sidebar-rgb), 0.707) 34.4%,
151
- rgba(var(--bg-sidebar-rgb), 0.644) 39.5%,
152
- rgba(var(--bg-sidebar-rgb), 0.578) 44.5%,
153
- rgba(var(--bg-sidebar-rgb), 0.511) 49.5%,
154
- rgba(var(--bg-sidebar-rgb), 0.443) 54.7%,
155
- rgba(var(--bg-sidebar-rgb), 0.373) 60.3%,
156
- rgba(var(--bg-sidebar-rgb), 0.301) 66.4%,
157
- rgba(var(--bg-sidebar-rgb), 0.228) 73.3%,
158
- rgba(var(--bg-sidebar-rgb), 0.153) 81%,
159
- rgba(var(--bg-sidebar-rgb), 0.077) 89.9%,
160
- rgba(var(--bg-sidebar-rgb), 0) 100%
144
+ rgba(var(--bg-sidebar-color-rgb) / 1) 0%,
145
+ rgba(var(--bg-sidebar-color-rgb) / 0.945) 8.6%,
146
+ rgba(var(--bg-sidebar-color-rgb) / 0.888) 16.2%,
147
+ rgba(var(--bg-sidebar-color-rgb) / 0.83) 22.9%,
148
+ rgba(var(--bg-sidebar-color-rgb) / 0.769) 28.9%,
149
+ rgba(var(--bg-sidebar-color-rgb) / 0.707) 34.4%,
150
+ rgba(var(--bg-sidebar-color-rgb) / 0.644) 39.5%,
151
+ rgba(var(--bg-sidebar-color-rgb) / 0.578) 44.5%,
152
+ rgba(var(--bg-sidebar-color-rgb) / 0.511) 49.5%,
153
+ rgba(var(--bg-sidebar-color-rgb) / 0.443) 54.7%,
154
+ rgba(var(--bg-sidebar-color-rgb) / 0.373) 60.3%,
155
+ rgba(var(--bg-sidebar-color-rgb) / 0.301) 66.4%,
156
+ rgba(var(--bg-sidebar-color-rgb) / 0.228) 73.3%,
157
+ rgba(var(--bg-sidebar-color-rgb) / 0.153) 81%,
158
+ rgba(var(--bg-sidebar-color-rgb) / 0.077) 89.9%,
159
+ rgba(var(--bg-sidebar-color-rgb) / 0) 100%
160
);
161
}
162
}
@@ -171,22 +170,22 @@ onMounted(() => {
170
top: 0;
171
left: 0;
172
z-index: -1;
174
- background-color: var(--bg-body);
173
+ background-color: var(--bg-body-color);
174
background: linear-gradient(
175
to bottom,
177
- rgba(var(--bg-body-rgb), 1) 0%,
178
- rgba(var(--bg-body-rgb), 0.738) 19%,
179
- rgba(var(--bg-body-rgb), 0.541) 34%,
180
- rgba(var(--bg-body-rgb), 0.382) 47%,
181
- rgba(var(--bg-body-rgb), 0.278) 56.5%,
182
- rgba(var(--bg-body-rgb), 0.194) 65%,
183
- rgba(var(--bg-body-rgb), 0.126) 73%,
184
- rgba(var(--bg-body-rgb), 0.075) 80.2%,
185
- rgba(var(--bg-body-rgb), 0.042) 86.1%,
186
- rgba(var(--bg-body-rgb), 0.021) 91%,
187
- rgba(var(--bg-body-rgb), 0.008) 95.2%,
188
- rgba(var(--bg-body-rgb), 0.002) 98.2%,
189
- rgba(var(--bg-body-rgb), 0) 100%
176
+ rgba(var(--bg-body-color-rgb) / 1) 0%,
177
+ rgba(var(--bg-body-color-rgb) / 0.738) 19%,
178
+ rgba(var(--bg-body-color-rgb) / 0.541) 34%,
179
+ rgba(var(--bg-body-color-rgb) / 0.382) 47%,
180
+ rgba(var(--bg-body-color-rgb) / 0.278) 56.5%,
181
+ rgba(var(--bg-body-color-rgb) / 0.194) 65%,
182
+ rgba(var(--bg-body-color-rgb) / 0.126) 73%,
183
+ rgba(var(--bg-body-color-rgb) / 0.075) 80.2%,
184
+ rgba(var(--bg-body-color-rgb) / 0.042) 86.1%,
185
+ rgba(var(--bg-body-color-rgb) / 0.021) 91%,
186
+ rgba(var(--bg-body-color-rgb) / 0.008) 95.2%,
187
+ rgba(var(--bg-body-color-rgb) / 0.002) 98.2%,
188
+ rgba(var(--bg-body-color-rgb) / 0) 100%
189
);
190
}
191
}
frontend/src/app-layouts/common/Toolbar/index.ts
new
+1
@@ -0,0 +1 @@
1
+export { default } from "./Toolbar.vue"
frontend/src/assets/scss/_mixin.scss
deleted
-8
@@ -1,8 +0,0 @@
1
-@mixin page-full-view {
2
- height: calc(100dvh - var(--toolbar-height));
3
- position: relative;
4
- top: calc(var(--view-padding) * -0.5);
5
- left: calc(var(--view-padding) * -1);
6
- margin-bottom: calc(var(--view-padding) * -1.5);
7
- width: 100vw;
8
-}
frontend/src/assets/scss/_variables.scss
deleted
-4
@@ -1,4 +0,0 @@
1
-:root {
2
- --border-small-050: 1px solid var(--border-color);
3
- --border-small-100: 1px solid var(--divider-010-color);
4
-}
frontend/src/assets/scss/common.scss
+4
-26
@@ -1,5 +1,3 @@
1
-@use "mixin";
2
-
1
.custom-label {
2
color: var(--label-color);
3
font-size: 10px;
@@ -23,26 +21,6 @@
21
}
22
}
23
26
-.page-wrapped {
27
- height: calc(100dvh - var(--toolbar-height) - var(--view-padding) - (var(--view-padding) / 2));
28
-}
29
-.page-min-wrapped {
30
- min-height: calc(100dvh - var(--toolbar-height) - var(--view-padding) - (var(--view-padding) / 2));
31
-}
32
-.page-mobile-full {
33
- @media (max-width: 700px) {
34
- @include mixin.page-full-view;
35
- }
36
-}
37
-.direction-rtl {
38
- .page-mobile-full {
39
- @media (max-width: 700px) {
40
- right: calc(var(--view-padding) * -1);
41
- left: unset;
42
- }
43
- }
44
-}
45
-
24
.page {
25
.page-header {
26
margin-bottom: 20px;
@@ -122,7 +100,7 @@
100
/* Works on Firefox */
101
102
scrollbar-width: thin;
125
- scrollbar-color: var(--hover-010-color) var(--bg-secondary-color);
103
+ scrollbar-color: var(--hover-color) var(--bg-secondary-color);
104
105
/* Works on Chrome, Edge, and Safari */
106
&::-webkit-scrollbar,
@@ -137,7 +115,7 @@
115
116
&::-webkit-scrollbar-thumb,
117
::-webkit-scrollbar-thumb {
140
- background-color: var(--hover-010-color);
118
+ background-color: var(--hover-color);
119
border-radius: 20px;
120
border: 2px solid var(--bg-secondary-color);
121
}
@@ -150,7 +128,7 @@
128
}
129
130
.over-layer {
153
- background-color: rgba(var(--bg-body-rgb), 0.8);
131
+ background-color: rgba(var(--bg-body-color-rgb), 0.8);
132
position: absolute;
133
top: 0;
134
left: 0;
@@ -164,7 +142,7 @@
142
.n-alert {
143
width: 90vw;
144
max-width: 500px;
167
- background-color: var(--bg-color);
145
+ background-color: var(--bg-default-color);
146
}
147
}
148
frontend/src/assets/scss/index.scss
+7
-7
@@ -18,7 +18,7 @@ body {
18
-moz-osx-font-smoothing: grayscale;
19
text-rendering: optimizeLegibility;
20
line-height: 1.35;
21
- font-size: 16px;
21
+ font-size: var(--font-size);
22
text-wrap: pretty;
23
24
margin: 0;
@@ -53,7 +53,7 @@ body {
53
}
54
55
::selection {
56
- background-color: var(--primary-020-color);
56
+ background-color: rgba(var(--primary-color-rgb) / 0.2);
57
}
58
59
#app {
@@ -62,8 +62,8 @@ body {
62
overflow: auto;
63
}
64
65
-* {
66
- //user-select: none;
65
+svg {
66
+ touch-action: initial !important;
67
}
68
69
input {
@@ -84,7 +84,7 @@ pre {
84
code {
85
padding: 1px 6px;
86
border-radius: var(--border-radius-small);
87
- background-color: var(--hover-005-color);
87
+ background-color: rgba(var(--hover-color-rgb) / 0.4);
88
font-size: 13px;
89
}
90
pre {
@@ -148,8 +148,8 @@ ol {
148
mark {
149
padding: 2px 0px;
150
border-radius: var(--border-radius-small);
151
- background-color: var(--primary-030-color);
152
- color: var(--fg-color);
151
+ background-color: rgba(var(--primary-color-rgb) / 0.3);
152
+ color: var(--fg-default-color);
153
}
154
155
@media print {
frontend/src/assets/scss/overrides/naive-override.scss
+22
-27
@@ -3,18 +3,19 @@
3
}
4
.n-modal,
5
.n-card.n-modal[role] {
6
- //background-color: rgba(var(--modal-color-rgb), 0.7);
6
+ // background-color: rgba(var(--bg-default-color-rgb) / 0.7);
7
backdrop-filter: blur(20px);
8
max-width: 90%;
9
margin: 10vh auto;
10
-
10
+}
11
+.n-card {
12
.n-card-header {
12
- flex-wrap: wrap-reverse;
13
+ flex-wrap: wrap;
14
gap: 12px;
15
justify-content: flex-end;
16
17
.n-card-header__main {
17
- min-width: auto;
18
+ min-width: auto !important;
19
}
20
}
21
}
@@ -57,12 +58,6 @@
58
}
59
60
.n-card {
60
- & > .n-card-header {
61
- div.n-card-header__main {
62
- //font-family: var(--font-family-display);
63
- font-weight: 700;
64
- }
65
- }
61
& > .n-card__content {
62
max-height: 100%;
63
}
@@ -79,23 +74,7 @@
74
75
.n-data-table {
76
.n-data-table-resize-button {
82
- --n-merged-border-color: var(--divider-010-color) !important;
83
- }
84
-}
85
-
86
-.n-space.n-space--rtl {
87
- .n-layout {
88
- aside.n-layout-sider.n-layout-sider--left-placement.n-layout-sider--bordered {
89
- .n-layout-toggle-button {
90
- right: unset;
91
- left: 0;
92
- transform: translateX(-50%) translateY(-50%) rotate(180deg);
93
- }
94
- .n-layout-sider__border {
95
- right: unset;
96
- left: 0;
97
- }
98
- }
77
+ --n-merged-border-color: rgba(var(--fg-secondary-color-rgb) / 0.35);
78
}
79
}
80
@@ -130,6 +109,22 @@
109
}
110
}
111
112
+.n-space.n-space--rtl {
113
+ .n-layout {
114
+ aside.n-layout-sider.n-layout-sider--left-placement.n-layout-sider--bordered {
115
+ .n-layout-toggle-button {
116
+ right: unset;
117
+ left: 0;
118
+ transform: translateX(-50%) translateY(-50%) rotate(180deg);
119
+ }
120
+ .n-layout-sider__border {
121
+ right: unset;
122
+ left: 0;
123
+ }
124
+ }
125
+ }
126
+}
127
+
128
.direction-rtl {
129
.v-binder-follower-container {
130
direction: ltr;
frontend/src/assets/scss/overrides/vue-md-it-override.scss
+3
-3
@@ -2,7 +2,7 @@
2
img {
3
max-width: 100%;
4
width: 100%;
5
- border: var(--border-small-100);
5
+ border: 1px solid var(--border-color);
6
border-radius: var(--border-radius);
7
}
8
@@ -10,7 +10,7 @@
10
--cell-padding: 8px 12px;
11
12
width: 100%;
13
- border: var(--border-small-100);
13
+ border: 1px solid var(--border-color);
14
border-radius: var(--border-radius);
15
text-align: left;
16
font-variant-numeric: tabular-nums;
@@ -33,7 +33,7 @@
33
tr {
34
td {
35
padding: var(--cell-padding);
36
- background-color: var(--bg-color);
36
+ background-color: var(--bg-default-color);
37
border-bottom: 1px solid var(--border-color);
38
}
39
frontend/src/assets/scss/overrides/vuesjv-override.scss
+4
-4
@@ -1,5 +1,5 @@
1
.vuesjv-override {
2
- color: var(--fg-color) !important;
2
+ color: var(--fg-default-color) !important;
3
font-family: var(--font-family-mono) !important;
4
line-height: 1.7 !important;
5
@@ -16,13 +16,13 @@
16
}
17
18
.bg-gray-200 {
19
- background-color: var(--divider-010-color);
19
+ background-color: rgba(var(--border-color-rgb) / 0.1);
20
}
21
.c-gray-400 {
22
color: var(--fg-secondary-color);
23
}
24
.c-indigo-600 {
25
- color: var(--secondary2-color);
25
+ color: var(--extra2-color);
26
}
27
.c-blue-600,
28
.c-purple-600,
@@ -41,7 +41,7 @@
41
}
42
43
.cursor-pointer {
44
- color: var(--fg-color);
44
+ color: var(--fg-default-color);
45
background-color: transparent;
46
height: 18px;
47
border-radius: 0;
frontend/src/components/agents/sca/ScaResults.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -43,7 +43,7 @@
43
/>
44
<n-popover overlap placement="right" class="!px-0">
45
<template #trigger>
46
- <div class="bg-default rounded-default">
46
+ <div class="bg-default rounded-lg">
47
<n-button size="small">
48
<template #icon>
49
<Icon :name="FilterIcon"></Icon>
frontend/src/components/agents/vulnerabilities/VulnerabilityCard.vue
+5
-5
@@ -171,8 +171,8 @@ const showDialog = ref(false)
171
<style lang="scss" scoped>
172
.vulnerability-card {
173
overflow: visible;
174
- border: 2px solid var(--bg-body);
175
- background-color: var(--bg-color);
174
+ border: 2px solid var(--bg-body-color);
175
+ background-color: var(--bg-default-color);
176
max-width: 100%;
177
box-sizing: border-box;
178
transition: all 0.3s;
@@ -185,7 +185,7 @@ const showDialog = ref(false)
185
position: absolute;
186
top: -10px;
187
right: -2px;
188
- border: 2px solid var(--bg-body);
188
+ border: 2px solid var(--bg-body-color);
189
border-radius: var(--border-radius);
190
line-height: 1;
191
text-transform: uppercase;
@@ -193,7 +193,7 @@ const showDialog = ref(false)
193
@apply px-2 py-0.5 text-xs;
194
white-space: nowrap;
195
text-overflow: ellipsis;
196
- background-color: var(--bg-color);
196
+ background-color: var(--bg-default-color);
197
transition: all 0.3s;
198
199
&::before {
@@ -204,7 +204,7 @@ const showDialog = ref(false)
204
z-index: 1;
205
width: calc(100% + 2px);
206
height: 13px;
207
- background-color: var(--bg-color);
207
+ background-color: var(--bg-default-color);
208
transition: all 0.3s;
209
}
210
&::after {
frontend/src/components/alerts/AlertWazuhRules.vue
+1
-1
@@ -42,7 +42,7 @@ const wazuh_rule = computed(() => data.value.wazuh_rule.replace(/\\\\/g, "\\\\\\
42
pre {
43
background-color: var(--bg-secondary-color) !important;
44
border-radius: var(--border-radius);
45
- border: var(--border-small-050);
45
+ border: 1px solid var(--border-color);
46
overflow: hidden;
47
}
48
code {
frontend/src/components/alerts/AlertsGraylogList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/alerts/AlertsList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/alerts/AlertsStatsItem.vue
+3
-3
@@ -31,16 +31,16 @@ const { summary } = defineProps<{ summary: Partial<AlertsByHost & AlertsByRule &
31
border-radius: var(--border-radius);
32
overflow: hidden;
33
background-color: var(--bg-secondary-color);
34
- border: var(--border-small-100);
34
+ border: 1px solid var(--border-color);
35
36
.info {
37
- border-right: var(--border-small-100);
37
+ border-right: 1px solid var(--border-color);
38
padding: 16px 20px;
39
}
40
41
.count {
42
min-width: 50px;
43
- background-color: var(--bg-color);
43
+ background-color: var(--bg-default-color);
44
font-weight: bold;
45
}
46
}
frontend/src/components/alerts/AlertsSummary.vue
+3
-3
@@ -80,7 +80,7 @@ const { gotoIndex } = useGoto()
80
transition: all 0.2s var(--bezier-ease);
81
82
.alert-details {
83
- border-bottom: var(--border-small-100);
83
+ border-bottom: 1px solid var(--border-color);
84
85
&:last-child {
86
border-bottom: none;
@@ -97,8 +97,8 @@ const { gotoIndex } = useGoto()
97
right: 0;
98
height: 100%;
99
width: 100%;
100
- background: rgba(var(--bg-color-rgb), 0.6);
101
- background: linear-gradient(transparent 0%, var(--bg-color) 85%);
100
+ background: rgba(var(--bg-default-color-rgb), 0.6);
101
+ background: linear-gradient(transparent 0%, var(--bg-default-color) 85%);
102
display: flex;
103
align-items: center;
104
text-align: center;
frontend/src/components/artifacts/ArtifactsCollect.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div v-if="isDirty" class="info flex gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/artifacts/ArtifactsList.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -31,7 +31,7 @@
31
/>
32
<n-popover :show="showFilters" trigger="manual" overlap placement="right" class="!px-0">
33
<template #trigger>
34
- <div class="bg-default rounded-default">
34
+ <div class="bg-default rounded-lg">
35
<n-badge
36
:show="!!lastFilters.hostname || !!lastFilters.os"
37
dot
frontend/src/components/auth/AuthForm.vue
+6
-6
@@ -2,7 +2,7 @@
2
<div class="w-full min-w-64 max-w-96">
3
<div>
4
<Logo mini :dark="isDark" class="mb-4" max-height="40px" />
5
- <div class="font-display mb-4 text-4xl font-bold">
5
+ <div class="font-display mb-4 text-4xl font-bold" data-test="login-title">
6
{{ title }}
7
</div>
8
<div class="text-secondary text-lg">
@@ -11,7 +11,7 @@
11
</div>
12
13
<transition name="form-fade" mode="out-in" appear class="my-10">
14
- <SignIn v-if="typeRef === 'signin'" key="signin" />
14
+ <SignIn v-if="type === 'signin'" key="signin" />
15
</transition>
16
</div>
17
</template>
@@ -27,20 +27,20 @@ const props = defineProps<{
27
type?: FormType
28
}>()
29
30
-const typeRef = ref<FormType>("signin")
30
+const type = ref<FormType>("signin")
31
const themeStore = useThemeStore()
32
const isDark = computed<boolean>(() => themeStore.isThemeDark)
33
const title = computed<string>(() =>
34
- typeRef.value === "signin"
34
+ type.value === "signin"
35
? "SOCFortress CoPilot"
36
- : typeRef.value === "signup"
36
+ : type.value === "signup"
37
? "SOCFortress CoPilot"
38
: "Forgot Password"
39
)
40
41
onBeforeMount(() => {
42
if (props.type) {
43
- typeRef.value = props.type
43
+ type.value = props.type
44
}
45
})
46
</script>
frontend/src/components/auth/ForgotPassword.vue
+27
-6
@@ -1,16 +1,18 @@
1
<template>
2
<n-form ref="formRef" :model="model" :rules="rules">
3
- <n-form-item path="email" label="Email">
3
+ <n-form-item path="email" label="Email" first>
4
<n-input
5
v-model:value="model.email"
6
- placeholder="Example@email.com"
6
+ placeholder="Input your email"
7
size="large"
8
@keydown.enter="forgotPassword"
9
/>
10
</n-form-item>
11
<div class="flex flex-col items-end gap-6">
12
<div class="w-full">
13
- <n-button type="primary" class="!w-full" size="large" @click="forgotPassword">Send Reset Link</n-button>
13
+ <n-button type="primary" class="!w-full" size="large" :disabled="!isValid" @click="forgotPassword">
14
+ Send Reset Link
15
+ </n-button>
16
</div>
17
</div>
18
</n-form>
@@ -19,6 +21,7 @@
21
<script lang="ts" setup>
22
import {
23
type FormInst,
24
+ type FormItemRule,
25
type FormRules,
26
type FormValidationError,
27
NButton,
@@ -27,7 +30,8 @@ import {
30
NInput,
31
useMessage
32
} from "naive-ui"
30
-import { ref } from "vue"
33
+import isEmail from "validator/es/lib/isEmail"
34
+import { computed, ref, watch } from "vue"
35
36
interface ModelType {
37
email: string | null
@@ -36,7 +40,7 @@ interface ModelType {
40
const formRef = ref<FormInst | null>(null)
41
const message = useMessage()
42
const model = ref<ModelType>({
39
- email: ""
43
+ email: null
44
})
45
46
const rules: FormRules = {
@@ -44,11 +48,22 @@ const rules: FormRules = {
48
{
49
required: true,
50
trigger: ["blur"],
47
- message: "Email is required"
51
+ message: "The email is mandatory"
52
+ },
53
+ {
54
+ validator: (rule: FormItemRule, value: string): boolean => {
55
+ return isEmail(value)
56
+ },
57
+ message: "The email is not formatted correctly",
58
+ trigger: ["blur"]
59
}
60
]
61
}
62
63
+const isValid = computed(() => {
64
+ return isEmail(model.value.email || "")
65
+})
66
+
67
function forgotPassword(e: Event) {
68
e.preventDefault()
69
formRef.value?.validate((errors: Array<FormValidationError> | undefined) => {
@@ -57,4 +72,10 @@ function forgotPassword(e: Event) {
72
}
73
})
74
}
75
+
76
+watch(isValid, val => {
77
+ if (val) {
78
+ formRef.value?.validate()
79
+ }
80
+})
81
</script>
frontend/src/components/auth/SignIn.vue
+2
-2
@@ -3,7 +3,7 @@
3
<n-form-item path="username" label="Username">
4
<n-input
5
v-model:value="model.username"
6
- placeholder="Username..."
6
+ placeholder="Insert your Username"
7
size="large"
8
autocomplete="on"
9
@keydown.enter="signIn"
@@ -14,7 +14,7 @@
14
v-model:value="model.password"
15
type="password"
16
show-password-on="click"
17
- placeholder="Password..."
17
+ placeholder="Insert your password"
18
autocomplete="on"
19
size="large"
20
@keydown.enter="signIn"
frontend/src/components/cloudSecurityAssessment/AvailableReportsList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/common/Badge.vue
+14
-14
@@ -32,7 +32,7 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
32
<style lang="scss" scoped>
33
.badge {
34
border-radius: var(--border-radius);
35
- border: var(--border-small-100);
35
+ border: 1px solid var(--border-color);
36
display: flex;
37
align-items: center;
38
font-size: 14px;
@@ -51,7 +51,7 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
51
52
&.active {
53
color: var(--success-color);
54
- background-color: var(--success-005-color);
54
+ background-color: rgba(var(--success-color-rgb) / 0.05);
55
border-color: var(--success-color);
56
}
57
@@ -65,7 +65,7 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
65
}
66
67
span:not(:last-child) {
68
- border-right: var(--border-small-100);
68
+ border-right: 1px solid var(--border-color);
69
padding-right: 8px;
70
}
71
@@ -80,7 +80,7 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
80
line-height: 24px;
81
82
&:first-child {
83
- background-color: var(--divider-005-color);
83
+ background-color: rgba(var(--border-color-rgb) / 0.05);
84
white-space: nowrap;
85
}
86
&:last-child {
@@ -92,48 +92,48 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
92
&.danger {
93
& > span {
94
&:first-child {
95
- background-color: var(--secondary4-opacity-010-color);
95
+ background-color: rgba(var(--error-color-rgb) / 0.1);
96
}
97
}
98
}
99
&.warning {
100
& > span {
101
&:first-child {
102
- background-color: var(--secondary3-opacity-010-color);
102
+ background-color: rgba(var(--warning-color-rgb) / 0.1);
103
}
104
}
105
}
106
&.success {
107
& > span {
108
&:first-child {
109
- background-color: var(--success-005-color);
109
+ background-color: rgba(var(--success-color-rgb) / 0.1);
110
}
111
}
112
}
113
&.primary {
114
& > span {
115
&:first-child {
116
- background-color: var(--primary-005-color);
116
+ background-color: rgba(var(--primary-color-rgb) / 0.1);
117
}
118
}
119
}
120
121
&.bright {
122
&.danger {
123
- border-color: var(--secondary4-opacity-030-color);
123
+ border-color: rgba(var(--error-color-rgb) / 0.3);
124
125
& > span {
126
&:first-child {
127
- background-color: var(--secondary4-opacity-020-color);
127
+ background-color: rgba(var(--error-color-rgb) / 0.2);
128
}
129
}
130
}
131
&.warning {
132
- border-color: var(--secondary3-opacity-030-color);
132
+ border-color: rgba(var(--warning-color-rgb) / 0.3);
133
134
& > span {
135
&:first-child {
136
- background-color: var(--secondary3-opacity-020-color);
136
+ background-color: rgba(var(--warning-color-rgb) / 0.2);
137
}
138
}
139
}
@@ -147,11 +147,11 @@ const { type, hintCursor, pointCursor, color, href, fluid } = defineProps<{
147
}
148
}
149
&.primary {
150
- border-color: var(--primary-030-color);
150
+ border-color: rgba(var(--primary-color-rgb) / 0.3);
151
152
& > span {
153
&:first-child {
154
- background-color: var(--primary-020-color);
154
+ background-color: rgba(var(--primary-color-rgb) / 0.2);
155
}
156
}
157
}
frontend/src/components/common/LayoutSettings.vue
deleted
-464
@@ -1,464 +0,0 @@
1
-<template>
2
- <div class="layout-settings flex items-center justify-center shadow-xl" :class="{ open }">
3
- <Transition mode="out-in" name="anim">
4
- <div v-if="!open" key="btn" class="open-btn flex items-center justify-center" @click="open = true">
5
- <Icon :size="24" :name="SettingsIcon" />
6
- </div>
7
-
8
- <div v-else key="form" class="ls-form flex flex-col">
9
- <div class="ls-header flex items-center justify-between">
10
- <div class="ls-title">Layout settings</div>
11
- <div class="ls-icon flex items-center">
12
- <Icon :size="20" :name="CloseIcon" @click="open = false" />
13
- </div>
14
- </div>
15
- <n-scrollbar class="ls-main">
16
- <div class="ls-section ls-color-selection">
17
- <div class="ls-label">Primary color</div>
18
- <div class="color-picker-box">
19
- <n-color-picker
20
- v-if="theme === ThemeNameEnum.Dark"
21
- v-model:value="darkColor"
22
- :modes="['hex']"
23
- :show-alpha="false"
24
- />
25
- <n-color-picker v-else v-model:value="lightColor" :modes="['hex']" :show-alpha="false" />
26
- </div>
27
- <div class="palette mt-3 flex justify-around">
28
- <n-button v-for="color of palette" :key="color.light" text @click="setPrimary(color)">
29
- <template #icon>
30
- <Icon
31
- :color="theme === ThemeNameEnum.Dark ? color.dark : color.light"
32
- :size="24"
33
- :name="ColorIcon"
34
- />
35
- </template>
36
- </n-button>
37
- </div>
38
- </div>
39
-
40
- <div class="ls-section ls-theme-selection">
41
- <div class="ls-label">Theme</div>
42
- <div class="flex items-center gap-2">
43
- <div class="basis-1/2">
44
- <n-button
45
- class="!w-full"
46
- :type="theme === ThemeNameEnum.Light ? 'primary' : 'default'"
47
- @click="theme = ThemeNameEnum.Light"
48
- >
49
- <template #icon>
50
- <Icon v-if="theme === ThemeNameEnum.Light" :name="LightIcon" />
51
- <Icon v-else :name="LightOutlineIcon" />
52
- </template>
53
- Light
54
- </n-button>
55
- </div>
56
- <div class="basis-1/2">
57
- <n-button
58
- class="!w-full"
59
- :type="theme === ThemeNameEnum.Dark ? 'primary' : 'default'"
60
- @click="theme = ThemeNameEnum.Dark"
61
- >
62
- <template #icon>
63
- <Icon v-if="theme === ThemeNameEnum.Dark" :name="DarkIcon" />
64
- <Icon v-else :name="DarkOutlineIcon" />
65
- </template>
66
- Dark
67
- </n-button>
68
- </div>
69
- </div>
70
- </div>
71
-
72
- <div class="ls-section ls-nav-selection">
73
- <div class="ls-label">
74
- Navbar
75
- <span v-if="isMobileView" class="px-1 opacity-50">desktop only</span>
76
- </div>
77
- <div class="flex items-center gap-2">
78
- <div class="basis-1/2">
79
- <!--
80
- <n-button
81
- class="!w-full"
82
- :type="layout === Layout.VerticalNav ? 'primary' : 'default'"
83
- :disabled="isMobileView"
84
- @click="layout = Layout.VerticalNav"
85
- >
86
- Vertical
87
- </n-button>
88
- -->
89
- </div>
90
- <div class="basis-1/2">
91
- <n-button
92
- class="!w-full"
93
- :type="layout === Layout.HorizontalNav ? 'primary' : 'default'"
94
- :disabled="isMobileView"
95
- @click="layout = Layout.HorizontalNav"
96
- >
97
- Horizontal
98
- </n-button>
99
- </div>
100
- </div>
101
- </div>
102
- <div class="ls-section ls-boxed-selection">
103
- <div class="flex flex-col gap-3">
104
- <div class="flex items-center justify-between">
105
- <div class="switch-label">
106
- View boxed
107
- <span v-if="isMobileView" class="px-1 opacity-50">desktop only</span>
108
- </div>
109
- <n-switch v-model:value="boxed" :disabled="isMobileView" size="small" />
110
- </div>
111
- <div class="flex items-center justify-between">
112
- <div class="switch-label">
113
- Toolbar boxed
114
- <span v-if="isMobileView" class="px-1 opacity-50">desktop only</span>
115
- </div>
116
- <n-switch
117
- v-model:value="toolbarBoxed"
118
- :disabled="!boxed || isMobileView"
119
- size="small"
120
- />
121
- </div>
122
- <div class="flex items-center justify-between">
123
- <div class="switch-label">Footer visible</div>
124
- <n-switch v-model:value="footerShown" size="small" />
125
- </div>
126
- <div class="flex items-center justify-between">
127
- <div class="switch-label">
128
- RTL
129
- <span class="px-1 opacity-50">beta</span>
130
- </div>
131
- <n-switch v-model:value="rtl" size="small" />
132
- </div>
133
- </div>
134
- </div>
135
-
136
- <div class="ls-section ls-transition-selection">
137
- <div class="ls-label">Router transition</div>
138
- <div class="ls-input flex justify-between">
139
- <n-select v-model:value="routerTransition" :options="transitionOptions" />
140
- </div>
141
- </div>
142
- <div class="ls-section ls-reset-selection items-center">
143
- <n-button class="!mb-3 !w-full" strong secondary type="primary" @click="reset()">
144
- Restore default
145
- </n-button>
146
- <a
147
- href="https://pinx-docs.vercel.app/layout"
148
- target="_blank"
149
- alt="docs"
150
- rel="nofollow noopener noreferrer"
151
- >
152
- Other settings
153
- </a>
154
- </div>
155
- </n-scrollbar>
156
- </div>
157
- </Transition>
158
- </div>
159
-</template>
160
-
161
-<script setup lang="ts">
162
-import Icon from "@/components/common/Icon.vue"
163
-import { useThemeStore } from "@/stores/theme"
164
-import { Layout, RouterTransition, ThemeNameEnum } from "@/types/theme.d"
165
-import { useWindowSize } from "@vueuse/core"
166
-import { NButton, NColorPicker, NScrollbar, NSelect, NSwitch, useOsTheme } from "naive-ui"
167
-import { computed, ref } from "vue"
168
-
169
-interface ColorPalette {
170
- light: string
171
- dark: string
172
-}
173
-
174
-type Palette = ColorPalette[]
175
-
176
-const SettingsIcon = "carbon:settings-adjust"
177
-const CloseIcon = "carbon:close"
178
-const LightIcon = "ion:sunny"
179
-const DarkIcon = "ion:moon"
180
-const LightOutlineIcon = "ion:sunny-outline"
181
-const DarkOutlineIcon = "ion:moon-outline"
182
-const ColorIcon = "carbon:circle-solid"
183
-
184
-const themeStore = useThemeStore()
185
-const { width: winWidth } = useWindowSize()
186
-const isMobileView = computed<boolean>(() => winWidth.value < 700)
187
-const open = ref(false)
188
-const transitionOptions = [
189
- {
190
- label: "Fade",
191
- value: "fade"
192
- },
193
- {
194
- label: "FadeUp",
195
- value: "fade-up"
196
- },
197
- {
198
- label: "FadeBottom",
199
- value: "fade-bottom"
200
- },
201
- {
202
- label: "FadeLeft",
203
- value: "fade-left"
204
- },
205
- {
206
- label: "FadeRight",
207
- value: "fade-right"
208
- }
209
-]
210
-
211
-const layout = computed({
212
- get: () => themeStore.layout,
213
- set: val => themeStore.setLayout(val)
214
-})
215
-
216
-const routerTransition = computed({
217
- get: () => themeStore.routerTransition,
218
- set: val => themeStore.setRouterTransition(val)
219
-})
220
-
221
-const theme = computed({
222
- get: () => themeStore.themeName,
223
- set: val => themeStore.setTheme(val)
224
-})
225
-
226
-const darkColor = computed({
227
- get: () => themeStore.darkPrimaryColor,
228
- set: val => themeStore.setColor(ThemeNameEnum.Dark, "primary", val)
229
-})
230
-
231
-const lightColor = computed({
232
- get: () => themeStore.lightPrimaryColor,
233
- set: val => themeStore.setColor(ThemeNameEnum.Light, "primary", val)
234
-})
235
-
236
-const rtl = computed({
237
- get: () => themeStore.isRTL,
238
- set: val => themeStore.setRTL(val)
239
-})
240
-
241
-const boxed = computed({
242
- get: () => themeStore.isBoxed,
243
- set: val => themeStore.setBoxed(val)
244
-})
245
-
246
-const toolbarBoxed = computed({
247
- get: () => themeStore.isToolbarBoxed,
248
- set: val => themeStore.setToolbarBoxed(val)
249
-})
250
-
251
-const footerShown = computed({
252
- get: () => themeStore.isFooterShown,
253
- set: val => themeStore.setFooterShow(val)
254
-})
255
-
256
-const palette = ref<Palette>([
257
- { light: "#00B27B", dark: "#00E19B" },
258
- { light: "#6267FF", dark: "#6267FF" },
259
- { light: "#FF61C9", dark: "#FF61C9" },
260
- { light: "#FFB600", dark: "#FFB600" },
261
- { light: "#FF0156", dark: "#FF0156" }
262
-])
263
-
264
-function setPrimary(color: ColorPalette) {
265
- themeStore.setColor(ThemeNameEnum.Dark, "primary", color.dark)
266
- themeStore.setColor(ThemeNameEnum.Light, "primary", color.light)
267
-}
268
-
269
-function reset() {
270
- themeStore.setColor(ThemeNameEnum.Dark, "primary", "#00E19B")
271
- themeStore.setColor(ThemeNameEnum.Light, "primary", "#00B27B")
272
- themeStore.setTheme(useOsTheme().value === "dark" ? ThemeNameEnum.Dark : ThemeNameEnum.Light)
273
- themeStore.setLayout(Layout.HorizontalNav)
274
- themeStore.setRouterTransition(RouterTransition.FadeUp)
275
- themeStore.setRTL(false)
276
- themeStore.setBoxed(true)
277
- themeStore.setToolbarBoxed(true)
278
- themeStore.setFooterShow(true)
279
-}
280
-</script>
281
-
282
-<style scoped lang="scss">
283
-.layout-settings {
284
- position: fixed;
285
- right: 10px;
286
- top: 50%;
287
- width: 50px;
288
- height: 50px;
289
- border-radius: 50px;
290
- background-color: var(--primary-color);
291
- color: var(--bg-color);
292
- transform: translateY(-50%);
293
- transition: all 0.3s;
294
- overflow: hidden;
295
- border: 1px solid transparent;
296
-
297
- .open-btn {
298
- cursor: pointer;
299
- width: 100%;
300
- height: 100%;
301
- position: absolute;
302
- will-change: opacity;
303
- }
304
- .ls-form {
305
- position: absolute;
306
- height: 100%;
307
- width: 100%;
308
- will-change: opacity;
309
-
310
- .ls-header {
311
- border-bottom: var(--border-small-050);
312
- font-size: 14px;
313
- text-transform: uppercase;
314
- font-weight: 700;
315
- padding: 10px 14px;
316
- line-height: 1;
317
- transition: all 0.3s;
318
-
319
- .ls-icon {
320
- cursor: pointer;
321
- opacity: 0.6;
322
-
323
- &:hover {
324
- opacity: 1;
325
- color: var(--primary-color);
326
- }
327
- }
328
- }
329
-
330
- .ls-main {
331
- .ls-section {
332
- padding: 14px;
333
- font-size: 12px;
334
- display: flex;
335
- flex-direction: column;
336
-
337
- &:not(:last-child) {
338
- border-bottom: var(--border-small-050);
339
- }
340
-
341
- .ls-label {
342
- font-size: 12px;
343
- margin-bottom: 8px;
344
- font-weight: 600;
345
- color: var(--fg-secondary-color);
346
- }
347
-
348
- &.ls-color-selection {
349
- .color-picker-box {
350
- line-height: 0;
351
- .n-color-picker {
352
- height: 28px;
353
- :deep() {
354
- .n-color-picker-trigger {
355
- .n-color-picker-trigger__fill {
356
- left: 5px;
357
- right: 5px;
358
- top: 5px;
359
- bottom: 5px;
360
- justify-content: flex-start;
361
- line-height: 0;
362
-
363
- .n-color-picker-checkboard {
364
- background: transparent;
365
- &::after {
366
- background-image: none;
367
- }
368
-
369
- & ~ div {
370
- width: 32px;
371
- border-radius: var(--border-radius-small);
372
- height: 100%;
373
- }
374
- }
375
- .n-color-picker-trigger__value {
376
- color: var(--fg-color) !important;
377
- margin-left: 44px;
378
- font-size: 12px;
379
- font-weight: 600;
380
- width: initial !important;
381
- height: initial !important;
382
- }
383
- }
384
- }
385
- }
386
- }
387
- }
388
- }
389
-
390
- &.ls-boxed-selection {
391
- .switch-label {
392
- font-size: 12px;
393
- font-weight: 600;
394
- color: var(--fg-secondary-color);
395
- }
396
- }
397
-
398
- &.ls-reset-selection {
399
- a {
400
- color: var(--fg-secondary-color);
401
- text-decoration-color: var(--fg-secondary-color);
402
- }
403
- }
404
- }
405
- }
406
- }
407
-
408
- &.open {
409
- width: 230px;
410
- height: 645px;
411
- right: 16px;
412
- border-radius: var(--border-radius);
413
- max-height: 90vh;
414
- max-height: 90svh;
415
- background-color: var(--bg-color);
416
- color: var(--fg-color);
417
- border-color: var(--border-color);
418
- }
419
-
420
- .anim-enter-active,
421
- .anim-leave-active {
422
- transition:
423
- opacity 0.1s var(--bezier-ease),
424
- transform 0.2s var(--bezier-ease);
425
- }
426
-
427
- .anim-enter-from,
428
- .anim-leave-to {
429
- opacity: 0;
430
- // transform: translateY(1%);
431
- }
432
-}
433
-
434
-.direction-rtl {
435
- .layout-settings {
436
- right: unset;
437
- left: 10px;
438
-
439
- .ls-form {
440
- .ls-header {
441
- direction: rtl;
442
- }
443
-
444
- :deep() {
445
- .n-color-picker {
446
- .n-color-picker-trigger {
447
- .n-color-picker-trigger__fill {
448
- .n-color-picker-trigger__value {
449
- margin-left: unset !important;
450
- margin-right: 44px;
451
- }
452
- }
453
- }
454
- }
455
- }
456
- }
457
-
458
- &.open {
459
- right: unset;
460
- left: 16px;
461
- }
462
- }
463
-}
464
-</style>
frontend/src/components/common/ListPercentage.vue
+4
-4
@@ -23,9 +23,9 @@
23
type="line"
24
:percentage="parseInt(item[percentageKey as keyof typeof item], 10)"
25
indicator-placement="inside"
26
- :indicator-text-color="style['bg-color']"
27
- :color="style['fg-color']"
28
- :rail-color="style['divider-020-color']"
26
+ :indicator-text-color="style['bg-default-color']"
27
+ :color="style['fg-default-color']"
28
+ :rail-color="style['border-color']"
29
class="font-mono font-bold"
30
/>
31
</div>
@@ -53,7 +53,7 @@ const style = computed(() => themeStore.style)
53
<style scoped lang="scss">
54
.list-header {
55
& > * {
56
- border-bottom: var(--border-small-100);
56
+ border-bottom: 1px solid var(--border-color);
57
@apply pb-1;
58
}
59
}
frontend/src/components/common/Notifications/List.vue
+8
-7
@@ -8,7 +8,7 @@
8
@click="item.action ? preformAction(item.id, item.action) : () => {}"
9
>
10
<div class="icon-box">
11
- <Icon v-if="item.category === 'alert'" :name="AlertIcon" :size="21"></Icon>
11
+ <Icon v-if="item.category === 'alert'" :name="AlertIcon" :size="21" />
12
<n-tooltip v-if="!item.read" trigger="hover" class="!p-0" content-class="!p-0" placement="right">
13
<template #trigger>
14
<div class="read-badge" @click.stop="setRead(item.id)" />
@@ -87,6 +87,7 @@ function formatDatetime(date: Date | string) {
87
position: relative;
88
padding: 14px 12px;
89
gap: 4px;
90
+ transition: background-color 0.2s linear;
91
92
.icon-box {
93
width: 45px;
@@ -149,7 +150,7 @@ function formatDatetime(date: Date | string) {
150
&.success {
151
.icon-box {
152
.n-icon {
152
- background-color: var(--success-005-color);
153
+ background-color: rgba(var(--success-color-rgb) / 0.1);
154
color: var(--success-color);
155
}
156
}
@@ -160,7 +161,7 @@ function formatDatetime(date: Date | string) {
161
&.info {
162
.icon-box {
163
.n-icon {
163
- background-color: var(--secondary1-opacity-010-color);
164
+ background-color: rgba(var(--info-color-rgb) / 0.1);
165
color: var(--info-color);
166
}
167
}
@@ -171,7 +172,7 @@ function formatDatetime(date: Date | string) {
172
&.warning {
173
.icon-box {
174
.n-icon {
174
- background-color: var(--secondary3-opacity-010-color);
175
+ background-color: rgba(var(--warning-color-rgb) / 0.1);
176
color: var(--warning-color);
177
}
178
}
@@ -182,7 +183,7 @@ function formatDatetime(date: Date | string) {
183
&.error {
184
.icon-box {
185
.n-icon {
185
- background-color: var(--secondary4-opacity-010-color);
186
+ background-color: rgba(var(--error-color-rgb) / 0.1);
187
color: var(--error-color);
188
}
189
}
@@ -196,11 +197,11 @@ function formatDatetime(date: Date | string) {
197
}
198
199
&:not(:last-child) {
199
- border-bottom: var(--border-small-050);
200
+ border-bottom: 1px solid var(--border-color);
201
}
202
203
&:hover {
203
- background-color: var(--hover-005-color);
204
+ background-color: var(--hover-color);
205
206
.delete-btn {
207
opacity: 0.5;
frontend/src/components/common/SearchDialog.vue
+4
-3
@@ -117,6 +117,7 @@ const commandIcon = ref("⌘")
117
const scrollContent = ref<(ScrollbarInst & { $el: HTMLElement }) | null>(null)
118
const { gotoCustomer, gotoSocAlerts, gotoAlerts, gotoConnectors } = useGoto()
119
120
+// TODO: review the groups and items
121
const groups = ref<Groups>([
122
{
123
name: "Applications",
@@ -348,7 +349,7 @@ onMounted(() => {
349
width: 28px;
350
height: 28px;
351
border-radius: 50%;
351
- background-color: var(--primary-005-color);
352
+ background-color: rgba(var(--primary-color-rgb) / 0.15);
353
display: flex;
354
justify-content: center;
355
align-items: center;
@@ -362,7 +363,7 @@ onMounted(() => {
363
}
364
365
&.active {
365
- background-color: var(--hover-005-color);
366
+ background-color: var(--hover-color);
367
}
368
&:hover {
369
box-shadow: 0px 0px 0px 1px var(--primary-color) inset;
@@ -378,7 +379,7 @@ onMounted(() => {
379
padding: 10px 0;
380
381
.icon {
381
- background-color: var(--code-color);
382
+ background-color: rgba(255, 255, 255, 0.3);
383
width: 18px;
384
height: 18px;
385
padding-top: 1px;
frontend/src/components/common/SegmentedPage.vue
+17
-10
@@ -186,7 +186,7 @@ onMounted(() => {
186
overflow: hidden;
187
border-radius: var(--border-radius);
188
border: 1px solid var(--border-color);
189
- background-color: var(--bg-color);
189
+ background-color: var(--bg-default-color);
190
direction: ltr;
191
192
.split-trigger {
@@ -213,10 +213,10 @@ onMounted(() => {
213
}
214
215
&:hover {
216
- background-color: var(--primary-010-color);
216
+ background-color: rgba(var(--primary-color-rgb) / 0.1);
217
218
.split-trigger-icon {
219
- background-color: var(--primary-010-color);
219
+ background-color: rgba(var(--primary-color-rgb) / 0.1);
220
}
221
}
222
}
@@ -228,7 +228,7 @@ onMounted(() => {
228
border-right: 1px solid var(--border-color);
229
230
.sidebar-header {
231
- border-block-end: var(--border-small-050);
231
+ border-block-end: 1px solid var(--border-color);
232
min-height: var(--mb-toolbar-height);
233
height: var(--mb-toolbar-height);
234
padding: 0 30px;
@@ -243,14 +243,14 @@ onMounted(() => {
243
}
244
245
.sidebar-footer {
246
- border-block-start: var(--border-small-050);
246
+ border-block-start: 1px solid var(--border-color);
247
min-height: var(--mb-toolbar-height);
248
padding: 0 30px;
249
}
250
}
251
252
.main {
253
- background-color: var(--bg-color);
253
+ background-color: var(--bg-default-color);
254
position: relative;
255
height: 100%;
256
@@ -264,7 +264,7 @@ onMounted(() => {
264
}
265
266
.main-toolbar {
267
- border-block-end: var(--border-small-050);
267
+ border-block-end: 1px solid var(--border-color);
268
min-height: var(--mb-toolbar-height);
269
height: var(--mb-toolbar-height);
270
padding: 0 30px;
@@ -290,7 +290,7 @@ onMounted(() => {
290
291
.main-footer {
292
container-type: inline-size;
293
- border-block-start: var(--border-small-050);
293
+ border-block-start: 1px solid var(--border-color);
294
padding: 0 30px;
295
296
.wrap {
@@ -302,6 +302,13 @@ onMounted(() => {
302
}
303
}
304
305
+ &.sidebar-position-right {
306
+ .sidebar {
307
+ border-right: none;
308
+ border-left: 1px solid var(--border-color);
309
+ }
310
+ }
311
+
312
@media (max-width: 700px) {
313
--mb-toolbar-height: 62px;
314
height: 100%;
@@ -313,7 +320,7 @@ onMounted(() => {
320
content: "";
321
width: 100vw;
322
display: block;
316
- background-color: var(--bg-body);
323
+ background-color: var(--bg-body-color);
324
position: absolute;
325
top: 0;
326
left: 0;
@@ -342,7 +349,7 @@ onMounted(() => {
349
width: 100%;
350
height: 100%;
351
display: block;
345
- background-color: var(--bg-color);
352
+ background-color: var(--bg-default-color);
353
z-index: -1;
354
position: absolute;
355
}
frontend/src/components/common/TestScope.vue
+1
-4
@@ -4,8 +4,5 @@
4
5
<script setup lang="ts">
6
// THIS COMPONENT IS USED FOR VITEST TESTING PURPOSES
7
-import { toRefs } from "vue"
8
-
9
-const props = defineProps<{ msg: string }>()
10
-const { msg } = toRefs(props)
7
+const { msg } = defineProps<{ msg: string }>()
8
</script>
frontend/src/components/common/cards/CardEntity.vue
+13
-13
@@ -95,11 +95,11 @@ const { size, status, embedded, highlighted, clickable, hoverable, disabled, loa
95
}
96
97
.extra-box {
98
- border-top: var(--border-small-050);
98
+ border-top: 1px solid var(--border-color);
99
}
100
101
.footer-box {
102
- border-top: var(--border-small-050);
102
+ border-top: 1px solid var(--border-color);
103
font-size: 13px;
104
background-color: var(--bg-secondary-color);
105
}
@@ -155,39 +155,39 @@ const { size, status, embedded, highlighted, clickable, hoverable, disabled, loa
155
156
&.embedded {
157
background-color: var(--bg-secondary-color);
158
- border: var(--border-small-100);
158
+ border: 1px solid var(--border-color);
159
160
.footer-box {
161
- background-color: var(--bg-body);
161
+ background-color: var(--bg-body-color);
162
}
163
}
164
165
&.card-status-success {
166
- background-color: var(--success-005-color);
167
- border-color: var(--success-030-color);
166
+ background-color: rgba(var(--success-color-rgb) / 0.05);
167
+ border-color: rgba(var(--success-color-rgb) / 0.3);
168
}
169
170
&.card-status-warning {
171
- background-color: var(--warning-005-color);
172
- border-color: var(--warning-030-color);
171
+ background-color: rgba(var(--warning-color-rgb) / 0.05);
172
+ border-color: rgba(var(--warning-color-rgb) / 0.3);
173
}
174
175
&.card-status-error {
176
- background-color: var(--error-005-color);
177
- border-color: var(--error-030-color);
176
+ background-color: rgba(var(--error-color-rgb) / 0.05);
177
+ border-color: rgba(var(--error-color-rgb) / 0.3);
178
}
179
180
&.hoverable {
181
&:not(.disabled) {
182
&:hover {
183
- border-color: var(--primary-040-color);
183
+ border-color: rgba(var(--primary-color-rgb) / 0.4);
184
}
185
}
186
}
187
188
&.highlighted {
189
- background-color: var(--primary-005-color);
190
- border-color: var(--primary-030-color);
189
+ background-color: rgba(var(--primary-color-rgb) / 0.05);
190
+ border-color: rgba(var(--primary-color-rgb) / 0.3);
191
192
&:not(.disabled) {
193
&:hover {
frontend/src/components/common/cards/CardKV.vue
+12
-12
@@ -19,7 +19,7 @@ const { color, size, valueClass } = defineProps<{
19
20
<style lang="scss" scoped>
21
.kv-card {
22
- border: var(--border-small-100);
22
+ border: 1px solid var(--border-color);
23
background-color: var(--bg-secondary-color);
24
border-radius: var(--border-radius);
25
overflow: hidden;
@@ -27,14 +27,14 @@ const { color, size, valueClass } = defineProps<{
27
flex-direction: column;
28
29
.key {
30
- border-bottom: var(--border-small-050);
30
+ border-bottom: 1px solid var(--border-color);
31
padding: 8px 12px;
32
font-size: 12px;
33
}
34
.value {
35
font-size: 14px;
36
padding: 8px 12px;
37
- background-color: var(--bg-color);
37
+ background-color: var(--bg-default-color);
38
font-family: var(--font-family-mono);
39
height: 100%;
40
flex-grow: 1;
@@ -56,20 +56,20 @@ const { color, size, valueClass } = defineProps<{
56
57
&.kv-color- {
58
&danger {
59
- border-color: var(--secondary4-opacity-030-color);
60
- background-color: var(--secondary4-opacity-020-color);
59
+ border-color: rgba(var(--error-color-rgb) / 0.3);
60
+ background-color: rgba(var(--error-color-rgb) / 0.2);
61
62
.key {
63
- border-color: var(--secondary4-opacity-030-color);
63
+ border-color: rgba(var(--error-color-rgb) / 0.3);
64
}
65
}
66
67
&warning {
68
- border-color: var(--secondary3-opacity-030-color);
69
- background-color: var(--secondary3-opacity-020-color);
68
+ border-color: rgba(var(--warning-color-rgb) / 0.3);
69
+ background-color: rgba(var(--warning-color-rgb) / 0.2);
70
71
.key {
72
- border-color: var(--secondary3-opacity-030-color);
72
+ border-color: rgba(var(--warning-color-rgb) / 0.3);
73
}
74
}
75
@@ -83,11 +83,11 @@ const { color, size, valueClass } = defineProps<{
83
}
84
85
&primary {
86
- border-color: var(--primary-030-color);
87
- background-color: var(--primary-020-color);
86
+ border-color: rgba(var(--primary-color-rgb) / 0.3);
87
+ background-color: rgba(var(--primary-color-rgb) / 0.2);
88
89
.key {
90
- border-color: var(--primary-030-color);
90
+ border-color: rgba(var(--primary-color-rgb) / 0.3);
91
}
92
}
93
}
frontend/src/components/common/cards/CardStatsBars.vue
+4
-4
@@ -109,7 +109,7 @@ const barValues = computed<ItemPropsExt[]>(() => sanitizedValues.value.filter(o
109
overflow: hidden;
110
111
.card-header {
112
- border-bottom: var(--border-small-050);
112
+ border-bottom: 1px solid var(--border-color);
113
overflow: hidden;
114
padding: 10px 16px;
115
@@ -139,7 +139,7 @@ const barValues = computed<ItemPropsExt[]>(() => sanitizedValues.value.filter(o
139
140
.fill {
141
border-radius: var(--border-radius-small);
142
- background-color: var(--fg-color);
142
+ background-color: var(--fg-default-color);
143
height: 100%;
144
width: 100%;
145
}
@@ -185,12 +185,12 @@ const barValues = computed<ItemPropsExt[]>(() => sanitizedValues.value.filter(o
185
width: 10px;
186
min-width: 10px;
187
border-radius: var(--border-radius-small);
188
- background-color: var(--fg-color);
188
+ background-color: var(--fg-default-color);
189
}
190
191
.divider {
192
height: 1px;
193
- background-color: var(--hover-010-color);
193
+ background-color: rgba(var(--border-color-rgb) / 0.1);
194
}
195
196
&.success {
frontend/src/components/common/cards/CardStatsMulti.vue
+3
-3
@@ -55,7 +55,7 @@ const ArrowRightIcon = "carbon:arrow-right"
55
overflow: hidden;
56
57
.card-header {
58
- border-bottom: var(--border-small-050);
58
+ border-bottom: 1px solid var(--border-color);
59
overflow: hidden;
60
padding: 10px 16px;
61
@@ -73,7 +73,7 @@ const ArrowRightIcon = "carbon:arrow-right"
73
overflow: hidden;
74
75
&:not(:last-child) {
76
- border-right: var(--border-small-050);
76
+ border-right: 1px solid var(--border-color);
77
}
78
79
.value {
@@ -92,7 +92,7 @@ const ArrowRightIcon = "carbon:arrow-right"
92
93
.label {
94
font-family: var(--font-family-mono);
95
- border-top: var(--border-small-050);
95
+ border-top: 1px solid var(--border-color);
96
color: var(--fg-secondary-color);
97
font-size: 13px;
98
padding: 6px;
frontend/src/components/connectors/ConfigForm/ConfigForm.vue
+1
-1
@@ -308,7 +308,7 @@ onMounted(() => {
308
@apply mb-7 gap-5;
309
310
.connector-image {
311
- border: 2px solid var(--bg-body);
311
+ border: 2px solid var(--bg-body-color);
312
}
313
}
314
}
frontend/src/components/customers/CustomerCreationButton.vue
+15
@@ -117,4 +117,19 @@ watch(
117
},
118
{ immediate: true }
119
)
120
+
121
+watch(
122
+ () => customersCount,
123
+ () => {
124
+ if (customersCount === undefined) {
125
+ return
126
+ }
127
+ if (customersCount >= 5) {
128
+ isMSSP5Enabled.value = true
129
+ }
130
+ if (customersCount >= 10) {
131
+ isMSSP10Enabled.value = true
132
+ }
133
+ }
134
+)
135
</script>
frontend/src/components/graylog/Alerts/List.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -36,7 +36,7 @@
36
<n-select v-if="!compactMode" v-model:value="timerange" size="small" :options="timeOptions" class="!w-32" />
37
<n-popover v-if="compactMode" overlap placement="right">
38
<template #trigger>
39
- <div class="bg-default rounded-default">
39
+ <div class="bg-default rounded-lg">
40
<n-button size="small">
41
<template #icon>
42
<Icon :name="FilterIcon"></Icon>
frontend/src/components/graylog/Events/Item.vue
+2
-2
@@ -85,8 +85,8 @@ const showDetails = ref(false)
85
86
<style lang="scss" scoped>
87
.priority {
88
- background-color: var(--hover-005-color);
89
- border: var(--border-small-100);
88
+ background-color: rgba(var(--hover-color-rgb) / 0.05);
89
+ border: 1px solid var(--border-color);
90
width: 20px;
91
height: 20px;
92
border-radius: 99999px;
frontend/src/components/graylog/Events/List.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/graylog/Inputs/List.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/graylog/Messages/List.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/graylog/Metrics/List.vue
+1
-1
@@ -99,7 +99,7 @@ function sanitizeMetrics(metrics: ThroughputMetric[]): Metrics[] {
99
}
100
101
&:not(:last-child) {
102
- border-bottom: var(--border-small-100);
102
+ border-bottom: 1px solid var(--border-color);
103
}
104
}
105
}
frontend/src/components/graylog/Metrics/UncommittedEntries.vue
+5
-5
@@ -137,10 +137,10 @@ watch(isThemeDark, () => {
137
width: 100%;
138
139
.uncommitted-entries {
140
- background-color: var(--bg-color);
140
+ background-color: var(--bg-default-color);
141
display: flex;
142
border-radius: var(--border-radius);
143
- border: var(--border-small-050);
143
+ border: 1px solid var(--border-color);
144
145
.label {
146
padding: 18px 22px;
@@ -149,7 +149,7 @@ watch(isThemeDark, () => {
149
font-weight: 700;
150
151
i {
152
- color: var(--secondary3-color);
152
+ color: var(--warning-color);
153
}
154
}
155
.value {
@@ -163,8 +163,8 @@ watch(isThemeDark, () => {
163
border-bottom-right-radius: var(--border-radius);
164
165
&.warning {
166
- color: var(--secondary3-color);
167
- background-color: var(--secondary3-opacity-005-color);
166
+ color: var(--warning-color);
167
+ background-color: rgba(var(--warning-color-rgb) / 0.05);
168
}
169
}
170
}
frontend/src/components/graylog/MonitoringAlerts/List.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/graylog/Streams/List.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -35,7 +35,7 @@
35
/>
36
<n-popover overlap placement="right" class="!px-0">
37
<template #trigger>
38
- <div class="bg-default rounded-default">
38
+ <div class="bg-default rounded-lg">
39
<n-button size="small">
40
<template #icon>
41
<Icon :name="FilterIcon"></Icon>
frontend/src/components/healthcheck/HealthcheckList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/incidentManagement/alerts/AlertComment.vue
+2
-2
@@ -201,8 +201,8 @@ onBeforeMount(() => {
201
202
.comment-message {
203
border-radius: var(--border-radius);
204
- background-color: var(--bg-color);
205
- border: var(--border-small-050);
204
+ background-color: var(--bg-default-color);
205
+ border: 1px solid var(--border-color);
206
padding: 6px 10px;
207
}
208
}
frontend/src/components/incidentManagement/alerts/AlertOverview.vue
+1
-1
@@ -222,6 +222,6 @@ function handleDelete() {
222
223
<style lang="scss" scoped>
224
.footer-box {
225
- border-top: var(--border-small-100);
225
+ border-top: 1px solid var(--border-color);
226
}
227
</style>
frontend/src/components/incidentManagement/alerts/AlertsList.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2 lg:!hidden">
5
<n-popover overlap placement="left">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -128,7 +128,7 @@
128
<span>Selected</span>
129
<n-badge
130
:value="checkedAlerts.length"
131
- color="var(--divider-030-color)"
131
+ color="rgba(var(--border-color-rgb) / 0.3)"
132
class="!font-mono"
133
/>
134
</div>
frontend/src/components/incidentManagement/cases/CaseOverview.vue
+1
-1
@@ -204,6 +204,6 @@ function handleDelete() {
204
205
<style lang="scss" scoped>
206
.footer-box {
207
- border-top: var(--border-small-100);
207
+ border-top: 1px solid var(--border-color);
208
}
209
</style>
frontend/src/components/incidentManagement/cases/CasesList.vue
+3
-3
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="left">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -38,7 +38,7 @@
38
39
<n-popover v-if="showMobileMenu" overlap placement="left" display-directive="show">
40
<template #trigger>
41
- <div class="bg-default rounded-default">
41
+ <div class="bg-default rounded-lg">
42
<n-button size="small" class="!cursor-pointer">
43
<template #icon>
44
<Icon :name="MenuIcon"></Icon>
@@ -72,7 +72,7 @@
72
/>
73
<n-popover v-if="!hideFilters" :show="showFilters" trigger="manual" overlap placement="right" class="!px-0">
74
<template #trigger>
75
- <div class="bg-default rounded-default">
75
+ <div class="bg-default rounded-lg">
76
<n-badge :show="filtered" dot type="success" :offset="[-4, 0]">
77
<n-button size="small" @click="showFilters = true">
78
<template #icon>
frontend/src/components/incidentManagement/sources/ConfiguredSourcesList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/indices/Marquee.vue
+5
-5
@@ -6,10 +6,10 @@
6
v-if="list?.length"
7
class="marquee-wrap"
8
:duration="(list?.length || 0) * 1"
9
- :pause-on-hover="true"
9
+ pause-on-hover
10
:clone="false"
11
- :gradient="true"
12
- :gradient-color="gradientColor"
11
+ gradient
12
+ :gradient-color
13
gradient-length="10%"
14
>
15
<span
@@ -61,8 +61,8 @@ const emit = defineEmits<{
61
const { indices } = toRefs(props)
62
const list = ref(indices.value)
63
const message = useMessage()
64
-const style = computed(() => useThemeStore().style)
65
-const gradientColor = computed(() => style.value["bg-color-rgb"].split(", "))
64
+const themeStore = useThemeStore()
65
+const gradientColor = computed(() => themeStore.style["bg-default-color-rgb"].split(" "))
66
const loading = ref(false)
67
68
function getIndices() {
frontend/src/components/indices/TopIndices.vue
+6
-6
@@ -63,10 +63,10 @@ function getOptions() {
63
left: "left",
64
type: "scroll",
65
textStyle: {
66
- color: style.value["fg-color"]
66
+ color: style.value["fg-default-color"]
67
},
68
pageTextStyle: {
69
- color: style.value["fg-color"]
69
+ color: style.value["fg-default-color"]
70
}
71
},
72
grid: {
@@ -86,7 +86,7 @@ function getOptions() {
86
show: false
87
},
88
itemStyle: {
89
- borderColor: style.value["bg-color"],
89
+ borderColor: style.value["bg-default-color"],
90
borderWidth: 2
91
},
92
data: [
@@ -139,13 +139,13 @@ function getOptions() {
139
// alignTo: "edge",
140
rich: {
141
name: {
142
- color: style.value["fg-color"],
142
+ color: style.value["fg-default-color"],
143
fontSize: window.innerWidth > 1000 ? 13 : 11
144
},
145
per: {
146
fontSize: window.innerWidth > 1000 ? 13 : 11,
147
fontWeight: "bold",
148
- color: style.value["fg-color"]
148
+ color: style.value["fg-default-color"]
149
}
150
}
151
},
@@ -162,7 +162,7 @@ function getOptions() {
162
}
163
},
164
itemStyle: {
165
- borderColor: style.value["bg-color"],
165
+ borderColor: style.value["bg-default-color"],
166
borderWidth: 1
167
},
168
data: sizeData
frontend/src/components/license/LicenseFeatures.vue
+2
-2
@@ -260,9 +260,9 @@ onMounted(() => {
260
}
261
262
.license-features-box {
263
- background-color: var(--bg-color);
263
+ background-color: var(--bg-default-color);
264
border-radius: var(--border-radius);
265
- border: var(--border-small-100);
265
+ border: 1px solid var(--border-color);
266
padding: 18px;
267
flex-grow: 1;
268
overflow: hidden;
frontend/src/components/license/deprecated/LicenseCheckout.vue
+1
-1
@@ -92,7 +92,7 @@ onBeforeMount(() => {
92
93
<style lang="scss" scoped>
94
.license-box {
95
- background-color: var(--bg-color);
95
+ background-color: var(--bg-default-color);
96
border-radius: var(--border-radius);
97
padding: 14px 18px;
98
.section {
frontend/src/components/logs/LogItem.vue
+4
-4
@@ -113,19 +113,19 @@ function formatDate(timestamp: string | number | Date, utc: boolean = true): str
113
114
.method {
115
&-get {
116
- color: var(--secondary1-color);
116
+ color: var(--extra1-color);
117
}
118
&-option {
119
- color: var(--secondary3-color);
119
+ color: var(--extra3-color);
120
}
121
&-put {
122
- color: var(--secondary2-color);
122
+ color: var(--extra2-color);
123
}
124
&-post {
125
color: var(--primary-color);
126
}
127
&-delete {
128
- color: var(--secondary4-color);
128
+ color: var(--error-color);
129
}
130
}
131
</style>
frontend/src/components/logs/LogsList.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -46,7 +46,7 @@
46
/>
47
<n-popover :show="showFilters" trigger="manual" overlap placement="right" class="!px-0">
48
<template #trigger>
49
- <div class="bg-default rounded-default">
49
+ <div class="bg-default rounded-lg">
50
<n-badge :show="filtered" dot type="success" :offset="[-4, 0]">
51
<n-button size="small" @click="showFilters = true">
52
<template #icon>
frontend/src/components/monitoringAlerts/List.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/components/reportCreation/Panels.vue
+12
-12
@@ -447,8 +447,8 @@ onMounted(() => {
447
448
.content {
449
border-radius: var(--border-radius);
450
- background-color: var(--bg-color);
451
- border: var(--border-small-050);
450
+ background-color: var(--bg-default-color);
451
+ border: 1px solid var(--border-color);
452
overflow: hidden;
453
display: flex;
454
align-items: center;
@@ -464,13 +464,13 @@ onMounted(() => {
464
465
&:hover {
466
.content {
467
- border-color: var(--primary-040-color);
467
+ border-color: rgba(var(--primary-color-rgb) / 0.4);
468
}
469
}
470
471
&.ghost-panel {
472
.content {
473
- border: 2px dashed var(--primary-040-color) !important;
473
+ border: 2px dashed rgba(var(--primary-color-rgb) / 0.4) !important;
474
}
475
}
476
}
@@ -490,7 +490,7 @@ onMounted(() => {
490
.row {
491
border-radius: var(--border-radius);
492
background-color: var(--bg-secondary-color);
493
- border: var(--border-small-050);
493
+ border: 1px solid var(--border-color);
494
height: 155px;
495
position: relative;
496
transition: border-color 0.2s;
@@ -519,7 +519,7 @@ onMounted(() => {
519
left: -32px;
520
bottom: 0;
521
width: 25px;
522
- border: var(--border-small-050);
522
+ border: 1px solid var(--border-color);
523
background-color: var(--bg-secondary-color);
524
border-radius: var(--border-radius);
525
@@ -536,7 +536,7 @@ onMounted(() => {
536
top: 0px;
537
left: 0px;
538
right: 0;
539
- background-color: rgba(var(--secondary4-color-rgb), 0.1);
539
+ background-color: rgba(var(--error-color-rgb), 0.1);
540
border-top-left-radius: var(--border-radius);
541
border-top-right-radius: var(--border-radius);
542
text-align: center;
@@ -548,7 +548,7 @@ onMounted(() => {
548
bottom: 0px;
549
left: 0px;
550
right: 0;
551
- background-color: var(--hover-005-color);
551
+ background-color: rgba(var(--hover-color-rgb) / 0.05);
552
border-bottom-left-radius: var(--border-radius);
553
border-bottom-right-radius: var(--border-radius);
554
text-align: center;
@@ -556,7 +556,7 @@ onMounted(() => {
556
}
557
558
&:hover {
559
- border-color: var(--primary-020-color);
559
+ border-color: rgba(var(--primary-color-rgb) / 0.2);
560
}
561
}
562
@@ -587,11 +587,11 @@ onMounted(() => {
587
}
588
589
&:hover {
590
- border-color: var(--primary-020-color);
590
+ border-color: rgba(var(--primary-color-rgb) / 0.2);
591
}
592
593
&.ghost-row {
594
- border: 2px dashed var(--primary-040-color) !important;
594
+ border: 2px dashed rgba(var(--primary-color-rgb) / 0.4) !important;
595
}
596
}
597
}
@@ -599,7 +599,7 @@ onMounted(() => {
599
600
.panels-sidebar {
601
border-radius: var(--border-radius);
602
- border: var(--border-small-050);
602
+ border: 1px solid var(--border-color);
603
width: 200px;
604
605
:deep() {
frontend/src/components/sigma/QueriesList.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -54,7 +54,7 @@
54
/>
55
<n-popover :show="showFilters" trigger="manual" overlap placement="right" class="!px-0">
56
<template #trigger>
57
- <div class="bg-default rounded-default">
57
+ <div class="bg-default rounded-lg">
58
<n-badge :show="filtered" dot type="success" :offset="[-4, 0]">
59
<n-button size="small" @click="showFilters = true">
60
<template #icon>
frontend/src/components/sigma/QueryOverview.vue
+1
-1
@@ -163,6 +163,6 @@ function updateQuery(updatedQuery: SigmaQuery) {
163
164
<style lang="scss" scoped>
165
.footer-box {
166
- border-top: var(--border-small-100);
166
+ border-top: 1px solid var(--border-color);
167
}
168
</style>
frontend/src/components/soc/SocCases/SocCasesList.vue
+2
-2
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-2">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
@@ -45,7 +45,7 @@
45
/>
46
<n-popover :show="showFilters" trigger="manual" overlap placement="right" class="!px-0">
47
<template #trigger>
48
- <div class="bg-default rounded-default">
48
+ <div class="bg-default rounded-lg">
49
<n-badge :show="filtered" dot type="success" :offset="[-4, 0]">
50
<n-button size="small" @click="showFilters = true">
51
<template #icon>
frontend/src/components/soc/SocUsers/SocUsersList.vue
+4
-4
@@ -137,15 +137,15 @@ onBeforeMount(() => {
137
138
tr:hover {
139
td {
140
- background-color: var(--primary-005-color);
140
+ background-color: rgba(var(--primary-color-rgb) / 0.05);
141
}
142
}
143
144
.highlight {
145
td {
146
- border-top: 1px solid var(--primary-030-color);
147
- border-bottom: 1px solid var(--primary-030-color);
148
- background-color: var(--primary-005-color);
146
+ border-top: 1px solid rgba(var(--primary-color-rgb) / 0.3);
147
+ border-bottom: 1px solid rgba(var(--primary-color-rgb) / 0.3);
148
+ background-color: rgba(var(--primary-color-rgb) / 0.05);
149
}
150
}
151
}
frontend/src/components/threatIntel/ThreatIntelForm.vue
+1
-1
@@ -165,7 +165,7 @@ onMounted(() => {
165
}
166
167
&:not(:last-child) {
168
- border-bottom: var(--border-small-100);
168
+ border-bottom: 1px solid var(--border-color);
169
}
170
}
171
}
frontend/src/components/users/UsersList.vue
+4
-4
@@ -169,15 +169,15 @@ onBeforeMount(() => {
169
170
tr:hover {
171
td {
172
- background-color: var(--primary-005-color);
172
+ background-color: rgba(var(--primary-color-rgb) / 0.05);
173
}
174
}
175
176
.highlight {
177
td {
178
- border-top: 1px solid var(--primary-030-color);
179
- border-bottom: 1px solid var(--primary-030-color);
180
- background-color: var(--primary-005-color);
178
+ border-top: 1px solid rgba(var(--primary-color-rgb) / 0.3);
179
+ border-bottom: 1px solid rgba(var(--primary-color-rgb) / 0.3);
180
+ background-color: rgba(var(--primary-color-rgb) / 0.05);
181
}
182
}
183
}
frontend/src/components/webVulnerabilityAssessment/ReportsList.vue
+1
-1
@@ -4,7 +4,7 @@
4
<div class="info flex grow gap-5">
5
<n-popover overlap placement="bottom-start">
6
<template #trigger>
7
- <div class="bg-default rounded-default">
7
+ <div class="bg-default rounded-lg">
8
<n-button size="small" class="!cursor-help">
9
<template #icon>
10
<Icon :name="InfoIcon"></Icon>
frontend/src/design-tokens.json
+53
-190
@@ -1,17 +1,22 @@
1
{
2
"borderRadius": {
3
- "base": "8px",
3
+ "default": "8px",
4
"small": "4px"
5
},
6
"lineHeight": {
7
- "base": "1.35"
7
+ "default": "1.25"
8
},
9
"fontSize": {
10
- "base": "16px",
10
+ "default": "16px",
11
"cardTitle": "18px"
12
},
13
+ "fontWeight": {
14
+ "default": "400",
15
+ "strong": "600",
16
+ "cardTitle": "600"
17
+ },
18
"fontFamily": {
14
- "base": "'Public Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'",
19
+ "default": "'Public Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'",
20
"display": "'Lexend', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'",
21
"mono": "'JetBrains Mono', SFMono-Regular, Menlo, Consolas, Courier, monospace"
22
},
@@ -20,226 +25,84 @@
25
"fontFamily": "{fontFamily.display}",
26
"fontSize": "30px",
27
"fontWeight": "700",
23
- "lineHeight": "41"
28
+ "lineHeight": "38"
29
},
30
"h2": {
31
"fontFamily": "{fontFamily.display}",
32
"fontSize": "26px",
33
"fontWeight": "700",
29
- "lineHeight": "35"
34
+ "lineHeight": "33"
35
},
36
"h3": {
37
"fontFamily": "{fontFamily.display}",
38
"fontSize": "22px",
39
"fontWeight": "700",
35
- "lineHeight": "30"
40
+ "lineHeight": "28"
41
},
42
"h4": {
43
"fontFamily": "{fontFamily.display}",
44
"fontSize": "18px",
45
"fontWeight": "500",
41
- "lineHeight": "24"
46
+ "lineHeight": "23"
47
},
48
"h5": {
49
"fontFamily": "{fontFamily.display}",
50
"fontSize": "14px",
51
"fontWeight": "700",
47
- "lineHeight": "19"
52
+ "lineHeight": "18"
53
},
54
"h6": {
50
- "fontFamily": "{fontFamily.base}",
55
+ "fontFamily": "{fontFamily.default}",
56
"fontSize": "12px",
57
"fontWeight": "500",
53
- "lineHeight": "16"
58
+ "lineHeight": "15"
59
},
60
"p": {
56
- "fontFamily": "{fontFamily.base}",
57
- "fontSize": "{fontSize.base}",
61
+ "fontFamily": "{fontFamily.default}",
62
+ "fontSize": "{fontSize.default}",
63
"lineHeight": "20"
64
}
65
},
66
"colors": {
67
"light": {
63
- "sidebarBackground": "#ffffff",
64
- "bodyBackground": "#f5f7f9",
65
- "text": "#000000",
66
- "textSecondary": "#495465",
67
- "background": "#ffffff",
68
- "backgroundSecondary": "#fafbfc",
69
- "primary": "rgb(255, 182, 0)",
70
- "primary005": "rgba(255, 182, 0, 0.05)",
71
- "primary010": "rgba(255, 182, 0, 0.1)",
72
- "primary015": "rgba(255, 182, 0, 0.15)",
73
- "primary020": "rgba(255, 182, 0, 0.2)",
74
- "primary030": "rgba(255, 182, 0, 0.3)",
75
- "primary040": "rgba(255, 182, 0, 0.4)",
76
- "primary050": "rgba(255, 182, 0, 0.5)",
77
- "primary060": "rgba(255, 182, 0, 0.6)",
78
- "primary070": "rgba(255, 182, 0, 0.7)",
79
- "primary080": "rgba(255, 182, 0, 0.8)",
80
- "primary090": "rgba(255, 182, 0, 0.9)",
81
- "info": "#6267FF",
82
- "success": "#00B27B",
83
- "warning": "#E3C22F",
84
- "error": "#FF0156",
85
- "info005": "rgba(98, 103, 255, 0.05)",
86
- "info010": "rgba(98, 103, 255, 0.1)",
87
- "info020": "rgba(98, 103, 255, 0.2)",
88
- "info030": "rgba(98, 103, 255, 0.3)",
89
- "info040": "rgba(98, 103, 255, 0.4)",
90
- "info050": "rgba(98, 103, 255, 0.5)",
91
- "info060": "rgba(98, 103, 255, 0.6)",
92
- "info070": "rgba(98, 103, 255, 0.7)",
93
- "info080": "rgba(98, 103, 255, 0.8)",
94
- "info090": "rgba(98, 103, 255, 0.9)",
95
- "success005": "rgba(0, 178, 123, 0.05)",
96
- "success010": "rgba(0, 178, 123, 0.1)",
97
- "success020": "rgba(0, 178, 123, 0.2)",
98
- "success030": "rgba(0, 178, 123, 0.3)",
99
- "success040": "rgba(0, 178, 123, 0.4)",
100
- "success050": "rgba(0, 178, 123, 0.5)",
101
- "success060": "rgba(0, 178, 123, 0.6)",
102
- "success070": "rgba(0, 178, 123, 0.7)",
103
- "success080": "rgba(0, 178, 123, 0.8)",
104
- "success090": "rgba(0, 178, 123, 0.9)",
105
- "warning005": "rgba(227, 194, 47, 0.05)",
106
- "warning010": "rgba(227, 194, 47, 0.1)",
107
- "warning020": "rgba(227, 194, 47, 0.2)",
108
- "warning030": "rgba(227, 194, 47, 0.3)",
109
- "warning040": "rgba(227, 194, 47, 0.4)",
110
- "warning050": "rgba(227, 194, 47, 0.5)",
111
- "warning060": "rgba(227, 194, 47, 0.6)",
112
- "warning070": "rgba(227, 194, 47, 0.7)",
113
- "warning080": "rgba(227, 194, 47, 0.8)",
114
- "warning090": "rgba(227, 194, 47, 0.9)",
115
- "error005": "rgba(255, 1, 86, 0.05)",
116
- "error010": "rgba(255, 1, 86, 0.1)",
117
- "error020": "rgba(255, 1, 86, 0.2)",
118
- "error030": "rgba(255, 1, 86, 0.3)",
119
- "error040": "rgba(255, 1, 86, 0.4)",
120
- "error050": "rgba(255, 1, 86, 0.5)",
121
- "error060": "rgba(255, 1, 86, 0.6)",
122
- "error070": "rgba(255, 1, 86, 0.7)",
123
- "error080": "rgba(255, 1, 86, 0.8)",
124
- "error090": "rgba(255, 1, 86, 0.9)",
125
- "secondary1": "rgb(98, 103, 255)",
126
- "secondary1Opacity005": "rgba(98, 103, 255, 0.05)",
127
- "secondary1Opacity010": "rgba(98, 103, 255, 0.1)",
128
- "secondary1Opacity020": "rgba(98, 103, 255, 0.2)",
129
- "secondary1Opacity030": "rgba(98, 103, 255, 0.3)",
130
- "secondary2": "rgb(255, 97, 201)",
131
- "secondary2Opacity005": "rgba(255, 97, 201, 0.05)",
132
- "secondary2Opacity010": "rgba(255, 97, 201, 0.1)",
133
- "secondary2Opacity020": "rgba(255, 97, 201, 0.2)",
134
- "secondary2Opacity030": "rgba(255, 97, 201, 0.3)",
135
- "secondary3": "rgb(227, 194, 47)",
136
- "secondary3Opacity005": "rgba(227, 194, 47, 0.05)",
137
- "secondary3Opacity010": "rgba(227, 194, 47, 0.1)",
138
- "secondary3Opacity020": "rgba(227, 194, 47, 0.2)",
139
- "secondary3Opacity030": "rgba(227, 194, 47, 0.3)",
140
- "secondary4": "rgb(255, 1, 86)",
141
- "secondary4Opacity005": "rgba(255, 1, 86, 0.05)",
142
- "secondary4Opacity010": "rgba(255, 1, 86, 0.1)",
143
- "secondary4Opacity020": "rgba(255, 1, 86, 0.2)",
144
- "secondary4Opacity030": "rgba(255, 1, 86, 0.3)",
145
- "divider005": "rgba(0, 0, 0, 0.05)",
146
- "divider010": "rgba(0, 0, 0, 0.1)",
147
- "divider020": "rgba(0, 0, 0, 0.2)",
148
- "divider030": "rgba(0, 0, 0, 0.3)",
149
- "hover005": "rgba(0, 0, 0, 0.05)",
150
- "hover010": "rgba(0, 0, 0, 0.1)",
151
- "hover050": "rgba(0, 0, 0, 0.5)"
68
+ "sidebarBackground": "rgb(255, 255, 255)",
69
+ "bodyBackground": "rgb(245, 247, 249)",
70
+ "text": "rgb(0, 0, 0)",
71
+ "textSecondary": "rgb(73, 84, 101)",
72
+ "textTertiary": "rgb(114, 115, 115)",
73
+ "background": "rgb(255, 255, 255)",
74
+ "backgroundSecondary": "rgb(250, 251, 252)",
75
+ "border": "rgb(226, 230, 233)",
76
+ "hover": "rgba(221, 224, 225, 0.5)",
77
+ "primary": "rgb(219, 157, 0)",
78
+ "info": "rgb(98, 103, 255)",
79
+ "success": "rgb(0, 178, 123)",
80
+ "warning": "rgb(227, 194, 47)",
81
+ "error": "rgb(255, 1, 86)",
82
+ "extra1": "rgb(98, 103, 255)",
83
+ "extra2": "rgb(255, 97, 201)",
84
+ "extra3": "rgb(227, 194, 47)",
85
+ "extra4": "rgb(255, 1, 86)"
86
},
87
"dark": {
154
- "sidebarBackground": "#1D1F25",
155
- "bodyBackground": "#14161A",
156
- "text": "#ffffff",
157
- "textSecondary": "#ACB5BE",
158
- "background": "#26282d",
159
- "backgroundSecondary": "#1D1F25",
88
+ "sidebarBackground": "rgb(29, 31, 37)",
89
+ "bodyBackground": "rgb(20, 22, 26)",
90
+ "text": "rgb(255, 255, 255)",
91
+ "textSecondary": "rgb(172, 181, 190)",
92
+ "textTertiary": "rgb(172, 181, 190)",
93
+ "background": "rgb(38, 40, 45)",
94
+ "backgroundSecondary": "rgb(29, 31, 37)",
95
+ "border": "rgb(67, 68, 76)",
96
+ "hover": "rgba(59, 61, 68, 0.5)",
97
"primary": "rgb(255, 182, 0)",
161
- "primary005": "rgba(255, 182, 0, 0.05)",
162
- "primary010": "rgba(255, 182, 0, 0.1)",
163
- "primary015": "rgba(255, 182, 0, 0.15)",
164
- "primary020": "rgba(255, 182, 0, 0.2)",
165
- "primary030": "rgba(255, 182, 0, 0.3)",
166
- "primary040": "rgba(255, 182, 0, 0.4)",
167
- "primary050": "rgba(255, 182, 0, 0.5)",
168
- "primary060": "rgba(255, 182, 0, 0.6)",
169
- "primary070": "rgba(255, 182, 0, 0.7)",
170
- "primary080": "rgba(255, 182, 0, 0.8)",
171
- "primary090": "rgba(255, 182, 0, 0.9)",
172
- "info": "#6267FF",
173
- "success": "#00E19B",
174
- "warning": "#E3C22F",
175
- "error": "#FF0156",
176
- "info005": "rgba(98, 103, 255, 0.05)",
177
- "info010": "rgba(98, 103, 255, 0.1)",
178
- "info020": "rgba(98, 103, 255, 0.2)",
179
- "info030": "rgba(98, 103, 255, 0.3)",
180
- "info040": "rgba(98, 103, 255, 0.4)",
181
- "info050": "rgba(98, 103, 255, 0.5)",
182
- "info060": "rgba(98, 103, 255, 0.6)",
183
- "info070": "rgba(98, 103, 255, 0.7)",
184
- "info080": "rgba(98, 103, 255, 0.8)",
185
- "info090": "rgba(98, 103, 255, 0.9)",
186
- "success005": "rgba(0, 178, 123, 0.05)",
187
- "success010": "rgba(0, 178, 123, 0.1)",
188
- "success020": "rgba(0, 178, 123, 0.2)",
189
- "success030": "rgba(0, 178, 123, 0.3)",
190
- "success040": "rgba(0, 178, 123, 0.4)",
191
- "success050": "rgba(0, 178, 123, 0.5)",
192
- "success060": "rgba(0, 178, 123, 0.6)",
193
- "success070": "rgba(0, 178, 123, 0.7)",
194
- "success080": "rgba(0, 178, 123, 0.8)",
195
- "success090": "rgba(0, 178, 123, 0.9)",
196
- "warning005": "rgba(227, 194, 47, 0.05)",
197
- "warning010": "rgba(227, 194, 47, 0.1)",
198
- "warning020": "rgba(227, 194, 47, 0.2)",
199
- "warning030": "rgba(227, 194, 47, 0.3)",
200
- "warning040": "rgba(227, 194, 47, 0.4)",
201
- "warning050": "rgba(227, 194, 47, 0.5)",
202
- "warning060": "rgba(227, 194, 47, 0.6)",
203
- "warning070": "rgba(227, 194, 47, 0.7)",
204
- "warning080": "rgba(227, 194, 47, 0.8)",
205
- "warning090": "rgba(227, 194, 47, 0.9)",
206
- "error005": "rgba(255, 1, 86, 0.05)",
207
- "error010": "rgba(255, 1, 86, 0.1)",
208
- "error020": "rgba(255, 1, 86, 0.2)",
209
- "error030": "rgba(255, 1, 86, 0.3)",
210
- "error040": "rgba(255, 1, 86, 0.4)",
211
- "error050": "rgba(255, 1, 86, 0.5)",
212
- "error060": "rgba(255, 1, 86, 0.6)",
213
- "error070": "rgba(255, 1, 86, 0.7)",
214
- "error080": "rgba(255, 1, 86, 0.8)",
215
- "error090": "rgba(255, 1, 86, 0.9)",
216
- "secondary1": "rgb(98, 103, 255)",
217
- "secondary1Opacity005": "rgba(98, 103, 255, 0.05)",
218
- "secondary1Opacity010": "rgba(98, 103, 255, 0.1)",
219
- "secondary1Opacity020": "rgba(98, 103, 255, 0.2)",
220
- "secondary1Opacity030": "rgba(98, 103, 255, 0.3)",
221
- "secondary2": "rgb(255, 97, 201)",
222
- "secondary2Opacity005": "rgba(255, 97, 201, 0.05)",
223
- "secondary2Opacity010": "rgba(255, 97, 201, 0.1)",
224
- "secondary2Opacity020": "rgba(255, 97, 201, 0.2)",
225
- "secondary2Opacity030": "rgba(255, 97, 201, 0.3)",
226
- "secondary3": "rgb(227, 194, 47)",
227
- "secondary3Opacity005": "rgba(227, 194, 47, 0.05)",
228
- "secondary3Opacity010": "rgba(227, 194, 47, 0.1)",
229
- "secondary3Opacity020": "rgba(227, 194, 47, 0.2)",
230
- "secondary3Opacity030": "rgba(227, 194, 47, 0.3)",
231
- "secondary4": "rgb(255, 1, 86)",
232
- "secondary4Opacity005": "rgba(255, 1, 86, 0.05)",
233
- "secondary4Opacity010": "rgba(255, 1, 86, 0.1)",
234
- "secondary4Opacity020": "rgba(255, 1, 86, 0.2)",
235
- "secondary4Opacity030": "rgba(255, 1, 86, 0.3)",
236
- "divider005": "rgba(255, 255, 255, 0.05)",
237
- "divider010": "rgba(255, 255, 255, 0.1)",
238
- "divider020": "rgba(255, 255, 255, 0.2)",
239
- "divider030": "rgba(255, 255, 255, 0.3)",
240
- "hover005": "rgba(255, 255, 255, 0.05)",
241
- "hover010": "rgba(255, 255, 255, 0.1)",
242
- "hover050": "rgba(255, 255, 255, 0.5)"
98
+ "info": "rgb(98, 103, 255)",
99
+ "success": "rgb(0, 225, 155)",
100
+ "warning": "rgb(227, 194, 47)",
101
+ "error": "rgb(255, 1, 86)",
102
+ "extra1": "rgb(98, 103, 255)",
103
+ "extra2": "rgb(255, 97, 201)",
104
+ "extra3": "rgb(227, 194, 47)",
105
+ "extra4": "rgb(255, 1, 86)"
106
}
107
}
108
}
frontend/src/router-env.d.ts
+5
-1
@@ -8,7 +8,11 @@ export {}
8
declare module "vue-router" {
9
interface RouteMeta extends RouteMetaAuth {
10
title?: string
11
- forceLayout?: Layout
11
+ theme?: {
12
+ layout?: Layout
13
+ boxed?: { enabled?: boolean }
14
+ padded?: { enabled?: boolean }
15
+ }
16
skipPin?: boolean
17
}
18
}
frontend/src/router/index.ts
+18
-3
@@ -271,15 +271,27 @@ const router = createRouter({
271
name: "Login",
272
component: AuthPage,
273
props: { formType: "signin" as FormType },
274
- meta: { title: "Login", forceLayout: Layout.Blank, checkAuth: true, skipPin: true }
274
+ meta: {
275
+ title: "Login",
276
+ theme: { layout: Layout.Blank, boxed: { enabled: false }, padded: { enabled: false } },
277
+ checkAuth: true,
278
+ skipPin: true
279
+ }
280
},
281
+ /*
282
{
283
path: "/register",
284
name: "Register",
285
component: AuthPage,
286
props: { formType: "signup" as FormType },
281
- meta: { title: "Register", forceLayout: Layout.Blank, checkAuth: true, skipPin: true }
287
+ meta: {
288
+ title: "Register",
289
+ theme: { layout: Layout.Blank, boxed: { enabled: false }, padded: { enabled: false } },
290
+ checkAuth: true,
291
+ skipPin: true
292
+ }
293
},
294
+ */
295
{
296
path: "/logout",
297
name: "Logout",
@@ -289,7 +301,10 @@ const router = createRouter({
301
path: "/:pathMatch(.*)*",
302
name: "NotFound",
303
component: () => import("@/views/NotFound.vue"),
292
- meta: { forceLayout: Layout.Blank, skipPin: true }
304
+ meta: {
305
+ theme: { layout: Layout.Blank, boxed: { enabled: false }, padded: { enabled: false } },
306
+ skipPin: true
307
+ }
308
}
309
]
310
})
frontend/src/stores/theme.ts
+6
-139
@@ -1,11 +1,9 @@
1
-import type { ColorType, Layout, RouterTransition } from "@/types/theme.d"
1
+import type { Layout, RouterTransition } from "@/types/theme.d"
2
import type { BuiltInGlobalTheme } from "naive-ui/es/themes/interface"
3
-import { getCssVars, getDefaultState } from "@/theme"
3
+import { getCssVars, getDefaultState, getThemeOverrides } from "@/theme"
4
import { ThemeNameEnum } from "@/types/theme.d"
5
-import { exportPrimaryShades, getThemeColors, getTypeValue, type PrimaryShade } from "@/utils/theme"
5
import { useWindowSize } from "@vueuse/core"
6
import _get from "lodash/get"
8
-import _pick from "lodash/pick"
7
import _set from "lodash/set"
8
import { darkTheme, type GlobalThemeOverrides, lightTheme, type ThemeCommonVars } from "naive-ui"
9
import { acceptHMRUpdate, defineStore } from "pinia"
@@ -41,20 +39,8 @@ export const useThemeStore = defineStore("theme", {
39
setThemeDark(): void {
40
this.themeName = ThemeNameEnum.Dark
41
},
44
- setColor(theme: ThemeNameEnum, colorType: ColorType, color: string): void {
45
- this.colors[theme][colorType] = color
46
-
47
- if (colorType === "primary") {
48
- const primaryShades = exportPrimaryShades(color)
49
-
50
- for (const k in primaryShades) {
51
- const name = k as PrimaryShade
52
- const shade = primaryShades[name]
53
-
54
- const colorKey = `${colorType}${name}` as keyof (typeof this.colors)[typeof theme]
55
- this.colors[theme][colorKey] = shade
56
- }
57
- }
42
+ setColor(theme: ThemeNameEnum, colorName: string, color: string): void {
43
+ ;(this.colors[theme] as Record<string, string>)[colorName] = color
44
},
45
toggleTheme(): void {
46
if (this.isThemeDark) {
@@ -109,7 +95,7 @@ export const useThemeStore = defineStore("theme", {
95
html.classList.add(`theme-${val}`)
96
}
97
},
112
- // This function allows you to utilize the values in the style object as variables within your CSS/SCSS code like: var(-–bg-color)
98
+ // This function allows you to utilize the values in the style object as variables within your CSS/SCSS code like: var(--bg-default-color)
99
setCssGlobalVars() {
100
if (document) {
101
const html = document.children[0] as HTMLElement
@@ -160,68 +146,7 @@ export const useThemeStore = defineStore("theme", {
146
return state.themeName === ThemeNameEnum.Dark ? darkTheme : lightTheme
147
},
148
themeOverrides(state): GlobalThemeOverrides {
163
- const {
164
- primary,
165
- success,
166
- warning,
167
- error,
168
- info,
169
- background,
170
- backgroundSecondary,
171
- bodyBackground,
172
- text,
173
- textSecondary,
174
- divider005,
175
- hover010
176
- } = state.colors[state.themeName]
177
-
178
- const themeColors = getThemeColors({ primary, success, warning, error, info })
179
-
180
- const lineHeight = state.lineHeight.base
181
- const borderRadius = state.borderRadius.base
182
- const borderRadiusSmall = state.borderRadius.small
183
-
184
- return {
185
- common: {
186
- ...themeColors,
187
- textColorBase: text,
188
- textColor1: text,
189
- textColor2: text,
190
- textColor3: textSecondary,
191
- bodyColor: bodyBackground,
192
- baseColor: background,
193
- popoverColor: background,
194
- cardColor: background,
195
- modalColor: background,
196
- lineHeight,
197
- borderRadius,
198
- borderRadiusSmall,
199
- fontSize: state.fontSize.base,
200
- fontFamily: state.fontFamily.base,
201
- fontFamilyMono: state.fontFamily.mono,
202
- dividerColor: divider005,
203
- hoverColor: hover010
204
- },
205
- Card: {
206
- color: background,
207
- colorEmbedded: backgroundSecondary,
208
- titleFontSizeSmall: state.fontSize.cardTitle,
209
- titleFontSizeMedium: state.fontSize.cardTitle,
210
- titleFontSizeLarge: state.fontSize.cardTitle,
211
- titleFontSizeHuge: state.fontSize.cardTitle
212
- },
213
- LoadingBar: {
214
- colorLoading: primary
215
- },
216
- Typography: {
217
- headerFontSize1: getTypeValue(state, state.typography.h1.fontSize),
218
- headerFontSize2: getTypeValue(state, state.typography.h2.fontSize),
219
- headerFontSize3: getTypeValue(state, state.typography.h3.fontSize),
220
- headerFontSize4: getTypeValue(state, state.typography.h4.fontSize),
221
- headerFontSize5: getTypeValue(state, state.typography.h5.fontSize),
222
- headerFontSize6: getTypeValue(state, state.typography.h6.fontSize)
223
- }
224
- }
149
+ return getThemeOverrides(state)
150
},
151
darkPrimaryColor(state): string {
152
return state.colors.dark.primary
@@ -229,64 +154,6 @@ export const useThemeStore = defineStore("theme", {
154
lightPrimaryColor(state): string {
155
return state.colors.light.primary
156
},
232
- primaryColor(state): string {
233
- return state.colors[state.themeName].primary
234
- },
235
- sidebarBackground(state): string {
236
- return state.colors[state.themeName].sidebarBackground
237
- },
238
- bodyBackground(state): string {
239
- return state.colors[state.themeName].bodyBackground
240
- },
241
- backgroundSecondaryColor(state): string {
242
- return state.colors[state.themeName].backgroundSecondary
243
- },
244
- secondaryColors(state): { [key: string]: string } {
245
- const pick = ["secondary1", "secondary2", "secondary3", "secondary4"]
246
- return _pick(state.colors[state.themeName], pick)
247
- },
248
- secondaryOpacityColors(state): { [key: string]: string } {
249
- const pick = [
250
- "secondary1Opacity005",
251
- "secondary1Opacity010",
252
- "secondary1Opacity020",
253
- "secondary1Opacity030",
254
- "secondary2Opacity005",
255
- "secondary2Opacity010",
256
- "secondary2Opacity020",
257
- "secondary2Opacity030",
258
- "secondary3Opacity005",
259
- "secondary3Opacity010",
260
- "secondary3Opacity020",
261
- "secondary3Opacity030",
262
- "secondary4Opacity005",
263
- "secondary4Opacity010",
264
- "secondary4Opacity020",
265
- "secondary4Opacity030"
266
- ]
267
- return _pick(state.colors[state.themeName], pick)
268
- },
269
- dividerColors(state): { [key: string]: string } {
270
- const pick = ["divider005", "divider010", "divider020", "divider030"]
271
- return _pick(state.colors[state.themeName], pick)
272
- },
273
- hoverColors(state): { [key: string]: string } {
274
- const pick = ["hover005", "hover010", "hover050"]
275
- return _pick(state.colors[state.themeName], pick)
276
- },
277
- primaryColors(state): { [key: string]: string } {
278
- const pick = [
279
- "primary005",
280
- "primary010",
281
- "primary015",
282
- "primary020",
283
- "primary030",
284
- "primary040",
285
- "primary050",
286
- "primary060"
287
- ]
288
- return _pick(state.colors[state.themeName], pick)
289
- },
157
naiveCommon(): ThemeCommonVars {
158
return { ...this.naiveTheme.common, ...this.themeOverrides.common }
159
},
frontend/src/theme/index.ts
+106
-241
@@ -1,19 +1,11 @@
1
import tokens from "@/design-tokens.json"
2
import { Layout, RouterTransition, ThemeNameEnum } from "@/types/theme.d"
3
-import { hex2rgb } from "@/utils/theme"
4
-import { type ThemeCommonVars, useOsTheme } from "naive-ui"
3
+import { colorToArray, expandPattern, getThemeColors, getTypeValue } from "@/utils/theme"
4
+import { type GlobalThemeOverrides, type ThemeCommonVars, useOsTheme } from "naive-ui"
5
6
type ThemeState = ReturnType<typeof getDefaultState>
7
8
interface ThemeGetters {
9
- dividerColors: { [key: string]: string }
10
- hoverColors: { [key: string]: string }
11
- primaryColors: { [key: string]: string }
12
- secondaryOpacityColors: { [key: string]: string }
13
- secondaryColors: { [key: string]: string }
14
- sidebarBackground: string
15
- bodyBackground: string
16
- backgroundSecondaryColor: string
9
naiveCommon: ThemeCommonVars
10
}
11
@@ -64,92 +56,94 @@ export function getDefaultState() {
56
borderRadius: tokens.borderRadius, // Border radius from the token
57
lineHeight: tokens.lineHeight, // Line height from the token
58
fontSize: tokens.fontSize, // Font size from the token
59
+ fontWeight: tokens.fontWeight, // Font weight from the token
60
fontFamily: tokens.fontFamily, // Font family from the token
61
typography: tokens.typography // Typography configurations from the token
62
}
63
}
64
72
-export function getCssVars(state: ThemeState, getters: ThemeGetters): { [key: string]: string } {
73
- const naive = getters.naiveCommon
74
-
75
- const bgColor = naive.baseColor
76
- const bgColorRGB = hex2rgb(bgColor).join(", ")
77
- const bgSecondaryColor = getters.backgroundSecondaryColor
78
- const fgColor = naive.textColorBase
79
- const fgSecondaryColor = naive.textColor3
65
+export function getThemeOverrides(state: ThemeState): GlobalThemeOverrides {
66
+ const {
67
+ primary,
68
+ success,
69
+ warning,
70
+ error,
71
+ info,
72
+ background,
73
+ backgroundSecondary,
74
+ bodyBackground,
75
+ text,
76
+ textTertiary,
77
+ border,
78
+ hover
79
+ } = state.colors[state.themeName]
80
81
- const tabFgColorActive = naive.textColor2
82
- const borderColor = naive.dividerColor
83
- const hoverColor = naive.hoverColor
84
- const primaryColor = naive.primaryColor
81
+ const themeColors = getThemeColors({ primary, success, warning, error, info })
82
86
- const successColor = naive.successColor
87
- const errorColor = naive.errorColor
88
- const warningColor = naive.warningColor
89
- const infoColor = naive.infoColor
90
- const successColorRGB = hex2rgb(successColor).join(", ")
91
- const errorColorRGB = hex2rgb(errorColor).join(", ")
92
- const warningColorRGB = hex2rgb(warningColor).join(", ")
93
- const infoColorRGB = hex2rgb(infoColor).join(", ")
83
+ const lineHeight = state.lineHeight.default
84
+ const borderRadius = state.borderRadius.default
85
+ const borderRadiusSmall = state.borderRadius.small
86
+ const borderColor = border
87
+ const hoverColor = hover
88
95
- const {
96
- success005,
97
- warning005,
98
- error005,
99
- info005,
100
- success010,
101
- warning010,
102
- error010,
103
- info010,
104
- success020,
105
- warning020,
106
- error020,
107
- info020,
108
- success030,
109
- warning030,
110
- error030,
111
- info030,
112
- success040,
113
- warning040,
114
- error040,
115
- info040,
116
- success050,
117
- warning050,
118
- error050,
119
- info050,
120
- success060,
121
- warning060,
122
- error060,
123
- info060,
124
- success070,
125
- warning070,
126
- error070,
127
- info070,
128
- success080,
129
- warning080,
130
- error080,
131
- info080,
132
- success090,
133
- warning090,
134
- error090,
135
- info090
136
- } = state.colors[state.themeName]
89
+ return {
90
+ common: {
91
+ ...themeColors,
92
+ textColorBase: text,
93
+ textColor1: text,
94
+ textColor2: text,
95
+ textColor3: textTertiary,
96
+ bodyColor: bodyBackground,
97
+ baseColor: background,
98
+ popoverColor: background,
99
+ cardColor: background,
100
+ modalColor: background,
101
+ lineHeight,
102
+ borderRadius,
103
+ borderRadiusSmall,
104
+ fontSize: state.fontSize.default,
105
+ fontWeight: state.fontWeight.default,
106
+ fontWeightStrong: state.fontWeight.strong,
107
+ fontFamily: state.fontFamily.default,
108
+ fontFamilyMono: state.fontFamily.mono,
109
+ borderColor,
110
+ hoverColor,
111
+ dividerColor: borderColor
112
+ },
113
+ Card: {
114
+ color: background,
115
+ colorEmbedded: backgroundSecondary,
116
+ titleFontSizeSmall: state.fontSize.cardTitle,
117
+ titleFontSizeMedium: state.fontSize.cardTitle,
118
+ titleFontSizeLarge: state.fontSize.cardTitle,
119
+ titleFontSizeHuge: state.fontSize.cardTitle,
120
+ titleFontWeight: state.fontWeight.cardTitle
121
+ },
122
+ LoadingBar: {
123
+ colorLoading: primary
124
+ },
125
+ Typography: {
126
+ headerFontSize1: getTypeValue(state, state.typography.h1.fontSize),
127
+ headerFontSize2: getTypeValue(state, state.typography.h2.fontSize),
128
+ headerFontSize3: getTypeValue(state, state.typography.h3.fontSize),
129
+ headerFontSize4: getTypeValue(state, state.typography.h4.fontSize),
130
+ headerFontSize5: getTypeValue(state, state.typography.h5.fontSize),
131
+ headerFontSize6: getTypeValue(state, state.typography.h6.fontSize)
132
+ }
133
+ }
134
+}
135
138
- const modalColor = naive.modalColor
139
- const modalColorRGB = hex2rgb(modalColor).join(", ")
140
- const codeColor = naive.codeColor
141
- const tabColor = naive.tabColor
142
- const tabColorActive = naive.inputColor
143
- const bezierEase = naive.cubicBezierEaseInOut
136
+export function getCssVars(state: ThemeState, getters: ThemeGetters): { [key: string]: string } {
137
+ const naive = getters.naiveCommon
138
145
- const buttonColorSecondary = naive.buttonColor2
146
- const buttonColorSecondaryHover = naive.buttonColor2Hover
147
- const buttonColorSecondaryPressed = naive.buttonColor2Pressed
139
+ const bgColor = naive.baseColor
140
+ const bgSecondaryColor = state.colors[state.themeName].backgroundSecondary
141
+ const fgColor = state.colors[state.themeName].text
142
+ const fgSecondaryColor = state.colors[state.themeName].textSecondary
143
+ const fgTertiaryColor = state.colors[state.themeName].textTertiary
144
149
- const bgSidebar = getters.sidebarBackground
150
- const bgSidebarRGB = hex2rgb(bgSidebar).join(", ")
151
- const bgBody = getters.bodyBackground
152
- const bgBodyRGB = hex2rgb(bgBody).join(", ")
145
+ const bgSidebar = state.colors[state.themeName].sidebarBackground
146
+ const bgBody = state.colors[state.themeName].bodyBackground
147
148
const boxedWidth = state.boxed.width
149
const routerTransitionDuration = state.routerTransitionDuration
@@ -160,57 +154,27 @@ export function getCssVars(state: ThemeState, getters: ThemeGetters): { [key: st
154
const toolbarHeight = state.toolbarHeight
155
const viewPadding = state.viewPadding
156
const headerBarHeight = state.headerBarHeight
163
- const fontFamily = state.fontFamily.base
157
+ const fontFamily = state.fontFamily.default
158
const fontFamilyDisplay = state.fontFamily.display
159
const fontFamilyMono = state.fontFamily.mono
160
+ const fontSize = state.fontSize.default
161
167
- const borderRadius = state.borderRadius.base
162
+ const borderRadius = state.borderRadius.default
163
const borderRadiusSmall = state.borderRadius.small
164
170
- const { divider005, divider010, divider020, divider030 } = getters.dividerColors
171
- const { hover005, hover010, hover050 } = getters.hoverColors
172
- const { primary005, primary010, primary015, primary020, primary030, primary040, primary050, primary060 } =
173
- getters.primaryColors
174
- const {
175
- secondary1Opacity005,
176
- secondary1Opacity010,
177
- secondary1Opacity020,
178
- secondary1Opacity030,
179
- secondary2Opacity005,
180
- secondary2Opacity010,
181
- secondary2Opacity020,
182
- secondary2Opacity030,
183
- secondary3Opacity005,
184
- secondary3Opacity010,
185
- secondary3Opacity020,
186
- secondary3Opacity030,
187
- secondary4Opacity005,
188
- secondary4Opacity010,
189
- secondary4Opacity020,
190
- secondary4Opacity030
191
- } = getters.secondaryOpacityColors
192
-
193
- const { secondary1, secondary2, secondary3, secondary4 } = getters.secondaryColors
194
- const secondary1RGB = hex2rgb(secondary1).join(", ")
195
- const secondary2RGB = hex2rgb(secondary2).join(", ")
196
- const secondary3RGB = hex2rgb(secondary3).join(", ")
197
- const secondary4RGB = hex2rgb(secondary4).join(", ")
165
+ const bezierEase = naive.cubicBezierEaseInOut
166
199
- // This style object, imported via the themeStore, will be available application-wide and is exposed in the HTML tag as a list of CSS variables, which you can use in your CSS/SCSS code like: var(-–bg-color)
200
- return {
201
- "bg-body": `${bgBody}`,
202
- "bg-body-rgb": `${bgBodyRGB}`,
203
- "bg-sidebar": `${bgSidebar}`,
204
- "bg-sidebar-rgb": `${bgSidebarRGB}`,
167
+ // This style object, imported via the themeStore, will be available application-wide and is exposed in the HTML tag as a list of CSS variables, which you can use in your CSS/SCSS code like: var(--bg-default-color)
168
+ const styleObject: Record<string, string> = {
169
+ "bg-body-color": `${bgBody}`,
170
+ "bg-sidebar-color": `${bgSidebar}`,
171
206
- "fg-color": `${fgColor}`,
172
+ "fg-default-color": `${fgColor}`,
173
"fg-secondary-color": `${fgSecondaryColor}`,
208
- "bg-color": `${bgColor}`,
209
- "bg-color-rgb": `${bgColorRGB}`,
174
+ "fg-tertiary-color": `${fgTertiaryColor}`,
175
+ "bg-default-color": `${bgColor}`,
176
"bg-secondary-color": `${bgSecondaryColor}`,
177
212
- "border-color": `${borderColor}`,
213
- "hover-color": `${hoverColor}`,
178
"bezier-ease": `${bezierEase}`,
179
"router-transition-duration": `${routerTransitionDuration}s`,
180
"sidebar-anim-ease": `${sidebarAnimEase}`,
@@ -227,123 +191,24 @@ export function getCssVars(state: ThemeState, getters: ThemeGetters): { [key: st
191
"font-family": `${fontFamily}`,
192
"font-family-display": `${fontFamilyDisplay}`,
193
"font-family-mono": `${fontFamilyMono}`,
194
+ "font-size": `${fontSize}`
195
+ }
196
231
- "code-color": `${codeColor}`,
232
- "primary-color": `${primaryColor}`,
233
- "tab-color": `${tabColor}`,
234
- "tab-color-active": `${tabColorActive}`,
235
- "tab-fg-color-active": `${tabFgColorActive}`,
236
- "modal-color": `${modalColor}`,
237
- "modal-color-rgb": `${modalColorRGB}`,
238
-
239
- "button-color-secondary": `${buttonColorSecondary}`,
240
- "button-color-secondary-hover": `${buttonColorSecondaryHover}`,
241
- "button-color-secondary-pressed": `${buttonColorSecondaryPressed}`,
242
-
243
- "primary-005-color": `${primary005}`,
244
- "primary-010-color": `${primary010}`,
245
- "primary-015-color": `${primary015}`,
246
- "primary-020-color": `${primary020}`,
247
- "primary-030-color": `${primary030}`,
248
- "primary-040-color": `${primary040}`,
249
- "primary-050-color": `${primary050}`,
250
- "primary-060-color": `${primary060}`,
251
-
252
- "hover-005-color": `${hover005}`,
253
- "hover-010-color": `${hover010}`,
254
- "hover-050-color": `${hover050}`,
255
-
256
- "divider-005-color": `${divider005}`,
257
- "divider-010-color": `${divider010}`,
258
- "divider-020-color": `${divider020}`,
259
- "divider-030-color": `${divider030}`,
260
-
261
- "success-color": `${successColor}`,
262
- "error-color": `${errorColor}`,
263
- "warning-color": `${warningColor}`,
264
- "info-color": `${infoColor}`,
265
- "success-005-color": `${success005}`,
266
- "error-005-color": `${error005}`,
267
- "warning-005-color": `${warning005}`,
268
- "info-005-color": `${info005}`,
269
-
270
- "success-010-color": `${success010}`,
271
- "error-010-color": `${error010}`,
272
- "warning-010-color": `${warning010}`,
273
- "info-010-color": `${info010}`,
274
-
275
- "success-020-color": `${success020}`,
276
- "error-020-color": `${error020}`,
277
- "warning-020-color": `${warning020}`,
278
- "info-020-color": `${info020}`,
279
-
280
- "success-030-color": `${success030}`,
281
- "error-030-color": `${error030}`,
282
- "warning-030-color": `${warning030}`,
283
- "info-030-color": `${info030}`,
284
-
285
- "success-040-color": `${success040}`,
286
- "error-040-color": `${error040}`,
287
- "warning-040-color": `${warning040}`,
288
- "info-040-color": `${info040}`,
289
-
290
- "success-050-color": `${success050}`,
291
- "error-050-color": `${error050}`,
292
- "warning-050-color": `${warning050}`,
293
- "info-050-color": `${info050}`,
294
-
295
- "success-060-color": `${success060}`,
296
- "error-060-color": `${error060}`,
297
- "warning-060-color": `${warning060}`,
298
- "info-060-color": `${info060}`,
299
-
300
- "success-070-color": `${success070}`,
301
- "error-070-color": `${error070}`,
302
- "warning-070-color": `${warning070}`,
303
- "info-070-color": `${info070}`,
304
-
305
- "success-080-color": `${success080}`,
306
- "error-080-color": `${error080}`,
307
- "warning-080-color": `${warning080}`,
308
- "info-080-color": `${info080}`,
309
-
310
- "success-090-color": `${success090}`,
311
- "error-090-color": `${error090}`,
312
- "warning-090-color": `${warning090}`,
313
- "info-090-color": `${info090}`,
314
-
315
- "success-color-rgb": `${successColorRGB}`,
316
- "error-color-rgb": `${errorColorRGB}`,
317
- "warning-color-rgb": `${warningColorRGB}`,
318
- "info-color-rgb": `${infoColorRGB}`,
319
-
320
- "secondary1-color": `${secondary1}`,
321
- "secondary1-color-rgb": `${secondary1RGB}`,
322
- "secondary2-color": `${secondary2}`,
323
- "secondary2-color-rgb": `${secondary2RGB}`,
324
- "secondary3-color": `${secondary3}`,
325
- "secondary3-color-rgb": `${secondary3RGB}`,
326
- "secondary4-color": `${secondary4}`,
327
- "secondary4-color-rgb": `${secondary4RGB}`,
197
+ // import colors by patterns
198
+ for (const pattern of ["extra(1|2|3|4)", "primary", "success", "warning", "error", "info", "border", "hover"]) {
199
+ const keys = expandPattern(pattern)
200
329
- "secondary1-opacity-005-color": `${secondary1Opacity005}`,
330
- "secondary1-opacity-010-color": `${secondary1Opacity010}`,
331
- "secondary1-opacity-020-color": `${secondary1Opacity020}`,
332
- "secondary1-opacity-030-color": `${secondary1Opacity030}`,
333
- "secondary2-opacity-005-color": `${secondary2Opacity005}`,
334
- "secondary2-opacity-010-color": `${secondary2Opacity010}`,
335
- "secondary2-opacity-020-color": `${secondary2Opacity020}`,
336
- "secondary2-opacity-030-color": `${secondary2Opacity030}`,
337
- "secondary3-opacity-005-color": `${secondary3Opacity005}`,
338
- "secondary3-opacity-010-color": `${secondary3Opacity010}`,
339
- "secondary3-opacity-020-color": `${secondary3Opacity020}`,
340
- "secondary3-opacity-030-color": `${secondary3Opacity030}`,
341
- "secondary4-opacity-005-color": `${secondary4Opacity005}`,
342
- "secondary4-opacity-010-color": `${secondary4Opacity010}`,
343
- "secondary4-opacity-020-color": `${secondary4Opacity020}`,
344
- "secondary4-opacity-030-color": `${secondary4Opacity030}`,
201
+ for (const key of keys) {
202
+ styleObject[`${key}-color`] = (state.colors[state.themeName] as Record<string, string>)[key]
203
+ }
204
+ }
205
346
- "border-small-050": `1px solid ${borderColor}`,
347
- "border-small-100": `1px solid ${divider010}`
206
+ // add RGB values variant
207
+ for (const [key, value] of Object.entries(styleObject)) {
208
+ if (key.endsWith("-color")) {
209
+ styleObject[`${key}-rgb`] = colorToArray(value, "rgb").join(" ")
210
+ }
211
}
212
+
213
+ return styleObject
214
}
frontend/src/types/theme.d.ts
-1
@@ -16,7 +16,6 @@ export enum ThemeNameEnum {
16
Light = "light"
17
}
18
19
-export type ColorType = "primary" | "info" | "success" | "warning" | "error"
19
export type ColorScene = "" | "Suppl" | "Hover" | "Pressed"
20
export type ColorKey = `${ColorType}Color${ColorScene}`
21
export type ThemeColor = Partial<Record<ColorKey, string>>
frontend/src/utils/auth.ts
+2
@@ -27,8 +27,10 @@ export function authCheck(route: RouteLocationNormalized) {
27
const { checkAuth, authRedirect, auth, roles }: RouteMetaAuth = route.meta
28
const authStore = useAuthStore()
29
30
+ // Logout handling
31
if (route?.redirectedFrom?.name === "Logout") authStore.setLogout()
32
33
+ // Auth check: if not logged or role not granted
34
const loginPath = `/login${window.location.search}`
35
36
if (auth && !authStore.isLogged) {
frontend/src/utils/index.ts
+1
@@ -16,6 +16,7 @@ export function file2Base64(blob: Blob): Promise<string> {
16
reader.onerror = error => reject(error)
17
})
18
}
19
+
20
export function isEnvDev() {
21
return process.env.NODE_ENV === "development"
22
}
frontend/src/utils/theme.ts
+58
-32
@@ -1,8 +1,10 @@
1
-import type { ColorAction, ColorKey, ColorType, ThemeColor } from "@/types/theme.d"
1
+import type { ColorAction, ColorKey, ThemeColor } from "@/types/theme.d"
2
import { colord } from "colord"
3
import _get from "lodash/get"
4
5
-export type PrimaryShade = "005" | "010" | "015" | "020" | "030" | "040" | "050" | "060"
5
+export const COLOR_SHADES = ["005", "010", "015", "020", "030", "040", "050", "060", "070", "080", "090"] as const
6
+
7
+export type ColorShade = (typeof COLOR_SHADES)[number]
8
9
export function toggleSidebarClass(
10
sidebarCollapsed: boolean,
@@ -17,37 +19,39 @@ export function toggleSidebarClass(
19
el.classList.toggle(classClose, sidebarCollapsed)
20
}
21
20
-export function hex2rgb(hex: string): number[] {
21
- const rgba = colord(hex).toRgb()
22
- return [rgba.r, rgba.g, rgba.b]
23
-}
24
-export function hex2hsl(hex: string): number[] {
25
- const hsl = colord(hex).toHsl()
26
- return [hsl.h, hsl.s, hsl.l]
22
+export function colorToArray(color: string, output: "rgb" | "hsl"): number[] {
23
+ const colorObject = colord(color)
24
+
25
+ switch (output) {
26
+ case "rgb": {
27
+ const { r, g, b } = colorObject.toRgb()
28
+ return [r, g, b]
29
+ }
30
+ case "hsl": {
31
+ const { h, s, l } = colorObject.toHsl()
32
+ return [h, s, l]
33
+ }
34
+ default:
35
+ throw new Error("Invalid output type")
36
+ }
37
}
38
39
export function exposure(color: string, amount: number): string {
30
- if (amount >= 0) {
31
- return colord(color).lighten(amount).desaturate(amount).toHex()
32
- }
40
return colord(color)
34
- .lighten(amount)
35
- .desaturate(amount * -1)
41
+ .lighten(amount) /* .desaturate(Math.abs(amount)) */
42
.toHex()
43
}
44
39
-export function exportPrimaryShades(color: string): { [key: string]: string } {
40
- const rgba = colord(color).toRgb()
41
- return {
42
- "005": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.05 }).toRgbString(),
43
- "010": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.1 }).toRgbString(),
44
- "015": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.15 }).toRgbString(),
45
- "020": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.2 }).toRgbString(),
46
- "030": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.3 }).toRgbString(),
47
- "040": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.4 }).toRgbString(),
48
- "050": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.5 }).toRgbString(),
49
- "060": colord({ r: rgba.r, g: rgba.g, b: rgba.b, a: 0.6 }).toRgbString()
50
- }
45
+export function getColorAlphaShades(color: string): { [key in ColorShade]: string } {
46
+ return COLOR_SHADES.reduce<{ [key in ColorShade]: string }>(
47
+ (acc, shade) => {
48
+ acc[shade] = colord(color)
49
+ .alpha(Number.parseInt(shade, 10) / 100)
50
+ .toRgbString()
51
+ return acc
52
+ },
53
+ {} as { [key in ColorShade]: string }
54
+ )
55
}
56
57
export function getTypeValue(origin: object, val: string) {
@@ -59,24 +63,46 @@ export function getTypeValue(origin: object, val: string) {
63
return val
64
}
65
62
-export function getThemeColors(colors: Record<ColorType, string>) {
66
+export function getThemeColors(colors: Record<string, string>) {
67
const colorActions: ColorAction[] = [
68
{ scene: "", handler: color => color },
69
{ scene: "Suppl", handler: color => exposure(color, 0.1) },
66
- { scene: "Hover", handler: color => exposure(color, 0.05) },
67
- { scene: "Pressed", handler: color => exposure(color, -0.2) }
70
+ { scene: "Hover", handler: color => exposure(color, 0.08) },
71
+ { scene: "Pressed", handler: color => exposure(color, -0.05) }
72
]
73
74
const themeColor: ThemeColor = {}
75
72
- for (const colorType in colors) {
73
- const colorValue = colors[colorType as ColorType]
76
+ for (const colorName in colors) {
77
+ const colorValue = colors[colorName]
78
79
colorActions.forEach(action => {
76
- const colorKey: ColorKey = `${colorType as ColorType}Color${action.scene}`
80
+ const colorKey: ColorKey = `${colorName}Color${action.scene}`
81
themeColor[colorKey] = action.handler(colorValue)
82
})
83
}
84
85
return themeColor
86
}
87
+
88
+/**
89
+ * Generates an array of strings by expanding all values enclosed in parentheses
90
+ *
91
+ * @param input - The string to process, e.g. "brand-(seablue|green)-(10|20|50)"
92
+ * @returns An array of expanded strings, e.g.
93
+ * ["brand-seablue-10", "brand-seablue-20", ..., "brand-green-50"]
94
+ */
95
+export function expandPattern(input: string): string[] {
96
+ const match = input.match(/\(([^)]+)\)/)
97
+ if (!match) {
98
+ // If there are no more parentheses, returns the input as an array
99
+ return [input]
100
+ }
101
+
102
+ // Expands the first group found
103
+ const [fullMatch, options] = match
104
+ const variants = options.split("|") // Splits the options by "|"
105
+
106
+ // Replaces the first group with each option and calls recursively
107
+ return variants.flatMap(option => expandPattern(input.replace(fullMatch, option)))
108
+}
frontend/src/views/Auth.vue
+2
-2
@@ -35,7 +35,7 @@ const align = ref<Align>("left")
35
const type = ref<FormType | undefined>(formType.value || undefined)
36
37
const themeStore = useThemeStore()
38
-const activeColor = computed(() => themeStore.primaryColor)
38
+const activeColor = computed(() => themeStore.style["primary-color"])
39
const authStore = useAuthStore()
40
const isLogged = computed(() => authStore.isLogged)
41
@@ -92,7 +92,7 @@ onBeforeMount(() => {
92
padding: 60px;
93
width: 100%;
94
max-width: 500px;
95
- background-color: var(--bg-color);
95
+ background-color: var(--bg-default-color);
96
border-radius: 20px;
97
@apply shadow-xl;
98
}
frontend/src/views/Profile.vue
+4
-4
@@ -3,7 +3,7 @@
3
<n-card class="header flex flex-col" content-class="!p-0">
4
<div class="user-info flex flex-wrap">
5
<div class="propic">
6
- <n-avatar :size="100" :src="userPic" round />
6
+ <n-avatar :size="100" :src="userPic" round :img-props="{ alt: 'avatar' }" />
7
<ImageCropper
8
v-if="propicEnabled"
9
v-slot="{ openCropper }"
@@ -104,7 +104,7 @@ function setCroppedImage(result: ImageCropperResult) {
104
gap: 30px;
105
padding: 30px;
106
padding-bottom: 20px;
107
- border-block-end: var(--border-small-050);
107
+ border-block-end: 1px solid var(--border-color);
108
container-type: inline-size;
109
110
.propic {
@@ -116,14 +116,14 @@ function setCroppedImage(result: ImageCropperResult) {
116
align-items: center;
117
justify-content: center;
118
background-color: var(--primary-color);
119
- color: var(--bg-color);
119
+ color: var(--bg-default-color);
120
position: absolute;
121
width: 26px;
122
height: 26px;
123
border-radius: 50%;
124
top: -1px;
125
right: -1px;
126
- border: 1px solid var(--bg-color);
126
+ border: 1px solid var(--bg-default-color);
127
cursor: pointer;
128
}
129
}
frontend/src/views/agents/Agents.vue
+2
-2
@@ -229,7 +229,7 @@ onBeforeMount(() => {
229
position: absolute;
230
bottom: 0;
231
right: 0;
232
- background-color: var(--bg-body);
232
+ background-color: var(--bg-body-color);
233
padding-left: var(--size);
234
padding-top: var(--size);
235
border-top-left-radius: var(--size);
@@ -247,7 +247,7 @@ onBeforeMount(() => {
247
background-image: radial-gradient(
248
circle at 0 0,
249
rgba(0, 0, 0, 0) calc(var(--size) - 1px),
250
- var(--bg-body) calc(var(--size) + 0px)
250
+ var(--bg-body-color) calc(var(--size) + 0px)
251
);
252
}
253
frontend/tailwind.config.js
+49
-30
@@ -14,9 +14,16 @@ function getValue(origin, val) {
14
return val
15
}
16
17
+function remFromPX(px) {
18
+ return {
19
+ key: Number.parseFloat(_.toNumber(px / 4).toFixed(4)),
20
+ rem: `${Number.parseFloat(_.toNumber(px / 16).toFixed(4))}rem`
21
+ }
22
+}
23
+
24
export default {
25
content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
19
- darkMode: ["class"],
26
+ darkMode: ["selector", `.theme-dark`],
27
theme: {
28
fontFamily: {
29
sans: ["var(--font-family)", "sans-serif"],
@@ -26,7 +33,30 @@ export default {
33
},
34
extend: {
35
colors: {
29
- primary: "var(--primary-color)"
36
+ primary: "rgb(var(--primary-color-rgb))",
37
+ success: "rgb(var(--success-color-rgb))",
38
+ error: "rgb(var(--error-color-rgb))",
39
+ warning: "rgb(var(--warning-color-rgb))",
40
+ info: "rgb(var(--info-color-rgb))",
41
+ border: "rgb(var(--border-color-rgb))",
42
+ hover: "rgb(var(--hover-color-rgb))",
43
+ extra: {
44
+ 1: "rgb(var(--extra1-color-rgb))",
45
+ 2: "rgb(var(--extra2-color-rgb))",
46
+ 3: "rgb(var(--extra3-color-rgb))",
47
+ 4: "rgb(var(--extra4-color-rgb))"
48
+ }
49
+ },
50
+ backgroundColor: {
51
+ default: "rgb(var(--bg-default-color-rgb))",
52
+ secondary: "rgb(var(--bg-secondary-color-rgb))",
53
+ body: "rgb(var(--bg-body-color-rgb))",
54
+ sidebar: "rgb(var(--bg-sidebar-color-rgb))"
55
+ },
56
+ textColor: {
57
+ default: "rgb(var(--fg-default-color-rgb))",
58
+ secondary: "rgb(var(--fg-secondary-color-rgb))",
59
+ tertiary: "rgb(var(--fg-tertiary-color-rgb))"
60
},
61
animation: {
62
fade: "fade 0.3s forwards"
@@ -37,55 +67,42 @@ export default {
67
to: { opacity: 1 }
68
}
69
},
40
- backgroundColor: {
41
- default: "var(--bg-color)",
42
- secondary: "var(--bg-secondary-color)"
43
- },
44
- textColor: {
45
- default: "var(--fg-color)",
46
- secondary: "var(--fg-secondary-color)",
47
- warning: "var(--warning-color)",
48
- error: "var(--error-color)",
49
- success: "var(--success-color)"
50
- },
51
- borderRadius: {
52
- default: "var(--border-radius)",
53
- small: "var(--border-radius-small)"
54
- },
70
screens: {
71
xs: "460px"
72
},
73
height: {
59
- 0.75: "0.1875rem",
60
- 150: "37.5rem",
74
+ [remFromPX(3).key]: remFromPX(3).rem, // 0.75
75
+ [remFromPX(600).key]: remFromPX(600).rem, // 150
76
"60vh": "60vh"
77
},
78
minHeight: {
79
114: "28.5rem",
65
- 120: "30rem"
66
- },
67
- width: {
68
- 5.5: "1.375rem",
69
- 150: "37.5rem",
70
- "90vw": "90vw"
71
- },
72
- spacing: {
73
- "20vh": "20vh",
74
- "50vw": "50vw"
80
+ 120: "30rem",
81
+ [remFromPX(548).key]: remFromPX(548).rem // 137
82
},
83
maxHeight: {
84
"50vh": "50vh",
85
106: "26.5rem",
86
125: "31.25rem",
80
- 150: "37.5rem"
87
+ [remFromPX(600).key]: remFromPX(600).rem // 150
88
+ },
89
+ width: {
90
+ [remFromPX(22).key]: remFromPX(22).rem, // 5.5
91
+ [remFromPX(600).key]: remFromPX(600).rem, // 150
92
+ "90vw": "90vw"
93
},
94
maxWidth: {
95
"90vw": "90vw"
96
+ },
97
+ spacing: {
98
+ "20vh": "20vh",
99
+ "50vw": "50vw"
100
}
101
}
102
},
103
safelist: [
104
"p-4",
105
+ "py-4",
106
"!p-1",
107
"flex",
108
"flex-col",
@@ -99,6 +116,8 @@ export default {
116
"max-h-50vh",
117
"max-w-90vw",
118
"!h-0.75",
119
+ "text-primary",
120
+ "mx-1",
121
"basis-1/4",
122
"basis-1/5"
123
],