Mitre improvement (#451)
* Refactor MITRE search result processing and enhance query handling for technique IDs * precommit fixes * Improve error handling in get_alerts function to specify healthcheck alerts fetching * chore: update frontend dependencies * feat: update TechniqueEventCard --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>
taylor_socfortress committed
Jun 2, 2025 at 11:32 UTC
d24100280f09b96ef3bdd6187d7d24d6abe4fea3
7 files changed
+438
-371
.flake8
+1
-1
@@ -3,7 +3,7 @@
3
max-line-length = 180
4
#select = B,C,E,F,W,T4,B9
5
#ignore = E203, E266, E501, W503, F403, F401
6
-ignore = E402, W503, E231, W605, E266, E712, E702, E713, E999
6
+ignore = E402, W503, E231, W605, E266, E712, E702, E713, E999, E272, E241, E221, E202
7
# E402, # module level import not at top of file (using isort)
8
# W503, # line break before binary operator
9
# E231, # missing whitespace after ',' (caused by black style)
backend/app/connectors/influxdb/services/alerts.py
+1
-1
@@ -84,6 +84,6 @@ async def get_alerts() -> InfluxDBAlertsResponse:
84
85
except Exception as e:
86
logger.error(f"Error fetching alerts: {e}")
87
- raise HTTPException(status_code=500, detail=f"Error fetching alerts: {e}")
87
+ raise HTTPException(status_code=500, detail=f"Error fetching healthcheck alerts from InfluxDB: {e}")
88
finally:
89
await client.close()
backend/app/connectors/wazuh_manager/services/mitre.py
+95
-56
@@ -717,61 +717,58 @@ def _process_mitre_search_results(
717
if not key:
718
continue
719
720
- # The key might be a single ID or a nested structure
721
- technique_ids = []
722
- if isinstance(key, list):
723
- # If key is already a list
724
- technique_ids.extend([tid for tid in key if tid])
725
- else:
726
- # If key is a string, might contain comma-separated values
727
- technique_ids.extend([tid.strip() for tid in str(key).split(",") if tid.strip()])
728
-
729
- for technique_id in technique_ids:
730
- # First try to get name from the document itself via sub-aggregation
731
- technique_name = "Unknown Technique"
732
-
733
- # Check if we have a name from sub-aggregation
734
- if name_field and "technique_name" in bucket and "buckets" in bucket["technique_name"]:
735
- name_buckets = bucket["technique_name"]["buckets"]
736
- if name_buckets and len(name_buckets) > 0 and name_buckets[0]["key"]:
737
- technique_name = name_buckets[0]["key"]
738
-
739
- # Get associated tactics for this technique
740
- tactics = []
741
- if technique_tactic_mapping:
742
- # Try exact match first
743
- if technique_id in technique_tactic_mapping:
744
- tactics = technique_tactic_mapping[technique_id]
745
- logger.debug(f"Found tactics for technique ID: {technique_id} (exact match)")
746
- # Try with 'T' prefix if it doesn't have one
747
- elif not technique_id.startswith("T") and f"T{technique_id}" in technique_tactic_mapping:
748
- tactics = technique_tactic_mapping[f"T{technique_id}"]
749
- logger.debug(f"Found tactics for technique ID: {technique_id} (added T prefix)")
750
- # Try without 'T' prefix if it has one
751
- elif technique_id.startswith("T") and technique_id[1:] in technique_tactic_mapping:
752
- tactics = technique_tactic_mapping[technique_id[1:]]
753
- logger.debug(f"Found tactics for technique ID: {technique_id} (removed T prefix)")
754
- else:
755
- # Log that we couldn't find tactics for this technique
756
- logger.debug(f"No tactics found for technique ID: {technique_id}")
720
+ # With the script-based aggregation, the key should now be a single MITRE ID
721
+ # but we still handle potential edge cases
722
+ technique_id = str(key).strip()
723
758
- # If no name found, use our mapping as fallback
759
- if technique_name == "Unknown Technique":
760
- technique_name = technique_mapping.get(technique_id, "Unknown Technique")
724
+ if not technique_id:
725
+ continue
726
762
- # Debug log if we're still getting "Unknown Technique"
763
- if technique_name == "Unknown Technique":
764
- logger.debug(f"Could not find name for technique {technique_id} in document or mapping")
727
+ # First try to get name from the document itself via sub-aggregation
728
+ technique_name = "Unknown Technique"
729
766
- techniques.append(
767
- {
768
- "technique_id": technique_id,
769
- "technique_name": technique_name,
770
- "count": bucket["doc_count"],
771
- "last_seen": datetime.utcnow().isoformat() + "Z",
772
- "tactics": tactics,
773
- },
774
- )
730
+ # Check if we have a name from sub-aggregation
731
+ if name_field and "technique_name" in bucket and "buckets" in bucket["technique_name"]:
732
+ name_buckets = bucket["technique_name"]["buckets"]
733
+ if name_buckets and len(name_buckets) > 0 and name_buckets[0]["key"]:
734
+ technique_name = name_buckets[0]["key"]
735
+
736
+ # Get associated tactics for this technique
737
+ tactics = []
738
+ if technique_tactic_mapping:
739
+ # Try exact match first
740
+ if technique_id in technique_tactic_mapping:
741
+ tactics = technique_tactic_mapping[technique_id]
742
+ logger.debug(f"Found tactics for technique ID: {technique_id} (exact match)")
743
+ # Try with 'T' prefix if it doesn't have one
744
+ elif not technique_id.startswith("T") and f"T{technique_id}" in technique_tactic_mapping:
745
+ tactics = technique_tactic_mapping[f"T{technique_id}"]
746
+ logger.debug(f"Found tactics for technique ID: {technique_id} (added T prefix)")
747
+ # Try without 'T' prefix if it has one
748
+ elif technique_id.startswith("T") and technique_id[1:] in technique_tactic_mapping:
749
+ tactics = technique_tactic_mapping[technique_id[1:]]
750
+ logger.debug(f"Found tactics for technique ID: {technique_id} (removed T prefix)")
751
+ else:
752
+ # Log that we couldn't find tactics for this technique
753
+ logger.debug(f"No tactics found for technique ID: {technique_id}")
754
+
755
+ # If no name found, use our mapping as fallback
756
+ if technique_name == "Unknown Technique":
757
+ technique_name = technique_mapping.get(technique_id, "Unknown Technique")
758
+
759
+ # Debug log if we're still getting "Unknown Technique"
760
+ if technique_name == "Unknown Technique":
761
+ logger.debug(f"Could not find name for technique {technique_id} in document or mapping")
762
+
763
+ techniques.append(
764
+ {
765
+ "technique_id": technique_id,
766
+ "technique_name": technique_name,
767
+ "count": bucket["doc_count"],
768
+ "last_seen": datetime.utcnow().isoformat() + "Z",
769
+ "tactics": tactics,
770
+ },
771
+ )
772
773
# Add debugging information
774
debug_info = {
@@ -822,14 +819,36 @@ def _build_mitre_search_query(
819
if additional_filters:
820
query_filters.extend(additional_filters)
821
825
- # Base query
822
+ # Use script-based aggregation to handle comma-separated MITRE IDs
823
+ script_source = f"""
824
+ def field_value = doc['{mitre_field}'].value;
825
+ if (field_value != null && field_value != '') {{
826
+ def techniques = new ArrayList();
827
+ // Split by comma and clean up whitespace
828
+ def parts = field_value.splitOnToken(',');
829
+ for (def part : parts) {{
830
+ def cleaned = part.trim();
831
+ if (cleaned != '') {{
832
+ techniques.add(cleaned);
833
+ }}
834
+ }}
835
+ return techniques;
836
+ }}
837
+ return [];
838
+ """
839
+
840
+ # Base query with script-based aggregation
841
query = {
842
"index": index_pattern,
843
"body": {
844
"size": 0,
845
"from": offset,
846
"query": {"bool": {"must": [], "filter": query_filters, "should": [], "must_not": []}},
832
- "aggs": {"techniques": {"terms": {"field": mitre_field, "size": size, "order": {"_count": "desc"}}}},
847
+ "aggs": {
848
+ "techniques": {
849
+ "terms": {"script": {"source": script_source, "lang": "painless"}, "size": size, "order": {"_count": "desc"}},
850
+ },
851
+ },
852
},
853
}
854
@@ -977,8 +996,28 @@ def _build_mitre_alerts_query(
996
# Build the base filters
997
query_filters = [{"range": {"timestamp": {"from": time_range, "to": "now"}}}]
998
980
- # Add MITRE ID filter with support for array fields
981
- query_filters.append({"query_string": {"query": f'{mitre_field}:"{technique_id}"', "analyze_wildcard": True}})
999
+ # Add MITRE ID filter with support for comma-separated values
1000
+ # This will match the technique ID whether it appears alone or in a comma-separated list
1001
+ mitre_query = {
1002
+ "bool": {
1003
+ "should": [
1004
+ # Exact match for single technique ID
1005
+ {"term": {mitre_field: technique_id}},
1006
+ # Match when it's in a comma-separated list
1007
+ {"wildcard": {mitre_field: f"*{technique_id}*"}},
1008
+ # Use query_string for more flexible matching
1009
+ {
1010
+ "query_string": {
1011
+ "query": f'{mitre_field}:"{technique_id}" OR {mitre_field}:"*{technique_id}*"',
1012
+ "analyze_wildcard": True,
1013
+ },
1014
+ },
1015
+ ],
1016
+ "minimum_should_match": 1,
1017
+ },
1018
+ }
1019
+
1020
+ query_filters.append(mitre_query)
1021
1022
# Add any additional filters provided
1023
if additional_filters:
frontend/package.json
+6
-6
@@ -3,7 +3,7 @@
3
"type": "module",
4
"version": "1.0.0",
5
"private": true,
6
- "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977",
6
+ "packageManager": "pnpm@10.11.1+sha512.e519b9f7639869dc8d5c3c5dfef73b3f091094b0a006d7317353c72b124e80e1afd429732e28705ad6bfa1ee879c1fce46c128ccebd3192101f43dd67c667912",
7
"engines": {
8
"node": ">=18.0.0"
9
},
@@ -43,7 +43,7 @@
43
"@codemirror/theme-one-dark": "^6.1.2",
44
"@f3ve/vue-markdown-it": "^0.2.3",
45
"@fontsource/jetbrains-mono": "^5.2.5",
46
- "@fontsource/lexend": "^5.2.7",
46
+ "@fontsource/lexend": "^5.2.8",
47
"@fontsource/public-sans": "^5.2.5",
48
"@shikijs/markdown-it": "^3.4.2",
49
"@vueuse/core": "^13.3.0",
@@ -98,7 +98,7 @@
98
"@types/jsdom": "^21.1.7",
99
"@types/lodash": "^4.17.17",
100
"@types/markdown-it": "^14.1.2",
101
- "@types/node": "^22.15.28",
101
+ "@types/node": "^22.15.29",
102
"@types/validator": "^13.15.1",
103
"@vitejs/plugin-vue": "^5.2.4",
104
"@vitejs/plugin-vue-jsx": "^4.2.0",
@@ -106,14 +106,14 @@
106
"@vue/tsconfig": "^0.7.0",
107
"cypress": "^14.4.0",
108
"depcheck": "^1.4.7",
109
- "eslint": "^9.27.0",
109
+ "eslint": "^9.28.0",
110
"flourite": "^1.3.0",
111
"fs-extra": "^11.3.0",
112
"jsdom": "^26.1.0",
113
"npm-run-all2": "^8.0.4",
114
"prettier": "^3.5.3",
115
"prettier-plugin-tailwindcss": "^0.6.12",
116
- "sass": "^1.89.0",
116
+ "sass": "^1.89.1",
117
"start-server-and-test": "^2.0.12",
118
"tailwindcss": "^4.1.8",
119
"taze": "^19.1.0",
@@ -123,7 +123,7 @@
123
"vite-bundle-visualizer": "^1.2.1",
124
"vite-plugin-vue-devtools": "^7.7.6",
125
"vite-svg-loader": "^5.1.0",
126
- "vitest": "^3.1.4",
126
+ "vitest": "^3.2.0",
127
"vue-tsc": "^2.2.10"
128
},
129
"pnpm": {
frontend/pnpm-lock.yaml
+242
-227
@@ -30,8 +30,8 @@ importers:
30
specifier: ^5.2.5
31
version: 5.2.5
32
'@fontsource/lexend':
33
- specifier: ^5.2.7
34
- version: 5.2.7
33
+ specifier: ^5.2.8
34
+ version: 5.2.8
35
'@fontsource/public-sans':
36
specifier: ^5.2.5
37
version: 5.2.5
@@ -143,7 +143,7 @@ importers:
143
devDependencies:
144
'@antfu/eslint-config':
145
specifier: ^4.13.2
146
- version: 4.13.2(@vue/compiler-sfc@3.5.16)(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
146
+ version: 4.13.2(@vue/compiler-sfc@3.5.16)(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
147
'@clack/prompts':
148
specifier: ^0.11.0
149
version: 0.11.0
@@ -152,7 +152,7 @@ importers:
152
version: 5.0.0(vue@3.5.16(typescript@5.8.3))
153
'@tailwindcss/vite':
154
specifier: ^4.1.8
155
- version: 4.1.8(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
155
+ version: 4.1.8(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
156
'@tsconfig/node20':
157
specifier: ^20.1.5
158
version: 20.1.5
@@ -175,17 +175,17 @@ importers:
175
specifier: ^14.1.2
176
version: 14.1.2
177
'@types/node':
178
- specifier: ^22.15.28
179
- version: 22.15.28
178
+ specifier: ^22.15.29
179
+ version: 22.15.29
180
'@types/validator':
181
specifier: ^13.15.1
182
version: 13.15.1
183
'@vitejs/plugin-vue':
184
specifier: ^5.2.4
185
- version: 5.2.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
185
+ version: 5.2.4(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
186
'@vitejs/plugin-vue-jsx':
187
specifier: ^4.2.0
188
- version: 4.2.0(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
188
+ version: 4.2.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
189
'@vue/test-utils':
190
specifier: ^2.4.6
191
version: 2.4.6
@@ -199,8 +199,8 @@ importers:
199
specifier: ^1.4.7
200
version: 1.4.7
201
eslint:
202
- specifier: ^9.27.0
203
- version: 9.27.0(jiti@2.4.2)
202
+ specifier: ^9.28.0
203
+ version: 9.28.0(jiti@2.4.2)
204
flourite:
205
specifier: ^1.3.0
206
version: 1.3.0
@@ -220,8 +220,8 @@ importers:
220
specifier: ^0.6.12
221
version: 0.6.12(prettier@3.5.3)
222
sass:
223
- specifier: ^1.89.0
224
- version: 1.89.0
223
+ specifier: ^1.89.1
224
+ version: 1.89.1
225
start-server-and-test:
226
specifier: ^2.0.12
227
version: 2.0.12
@@ -239,19 +239,19 @@ importers:
239
version: 5.8.3
240
vite:
241
specifier: ^6.3.5
242
- version: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
242
+ version: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
243
vite-bundle-visualizer:
244
specifier: ^1.2.1
245
version: 1.2.1(rollup@4.41.1)
246
vite-plugin-vue-devtools:
247
specifier: ^7.7.6
248
- version: 7.7.6(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
248
+ version: 7.7.6(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
249
vite-svg-loader:
250
specifier: ^5.1.0
251
version: 5.1.0(vue@3.5.16(typescript@5.8.3))
252
vitest:
253
- specifier: ^3.1.4
254
- version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
253
+ specifier: ^3.2.0
254
+ version: 3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
255
vue-tsc:
256
specifier: ^2.2.10
257
version: 2.2.10(typescript@5.8.3)
@@ -775,8 +775,8 @@ packages:
775
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
776
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
777
778
- '@eslint/js@9.27.0':
779
- resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==}
778
+ '@eslint/js@9.28.0':
779
+ resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
780
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
781
782
'@eslint/markdown@6.4.0':
@@ -803,8 +803,8 @@ packages:
803
'@fontsource/jetbrains-mono@5.2.5':
804
resolution: {integrity: sha512-TPZ9b/uq38RMdrlZZkl0RwN8Ju9JxuqMETrw76pUQFbGtE1QbwQaNsLlnUrACNNBNbd0NZRXiJJSkC8ajPgbew==}
805
806
- '@fontsource/lexend@5.2.7':
807
- resolution: {integrity: sha512-LvhJCaFlpR3/5msAzvIGJqVlvcVIN/Je9niM+pCFUazGeeb0ygOu0TlyAAJCi1TpN3te6tVqnDVMW+1fSFNQ9w==}
806
+ '@fontsource/lexend@5.2.8':
807
+ resolution: {integrity: sha512-+lIYZSDjb8FHj1AMvL+Olx/GSH+3HY+vfzA9QrXaXm7nigYiCKV29Sdubl2Yskn6HTZJzedPQa47z3Z77yvNEw==}
808
809
'@fontsource/public-sans@5.2.5':
810
resolution: {integrity: sha512-WSRBuKX8dwHxc35s/Q1arB7vkGL2A9YHB93gRP9OTu/nYgat0CBHfsAOUSDehBnREHa0rYZvWDDS08w5qPoWvg==}
@@ -1312,9 +1312,15 @@ packages:
1312
'@types/bytes@3.1.5':
1313
resolution: {integrity: sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==}
1314
1315
+ '@types/chai@5.2.2':
1316
+ resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
1317
+
1318
'@types/debug@4.1.12':
1319
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
1320
1321
+ '@types/deep-eql@4.0.2':
1322
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
1323
+
1324
'@types/estree@1.0.7':
1325
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
1326
@@ -1363,8 +1369,8 @@ packages:
1369
'@types/ms@2.1.0':
1370
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
1371
1366
- '@types/node@22.15.28':
1367
- resolution: {integrity: sha512-I0okKVDmyKR281I0UIFV7EWAWRnR0gkuSKob5wVcByyyhr7Px/slhkQapcYX4u00ekzNWaS1gznKZnuzxwo4pw==}
1372
+ '@types/node@22.15.29':
1373
+ resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==}
1374
1375
'@types/parse-json@4.0.2':
1376
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -1561,34 +1567,34 @@ packages:
1567
vitest:
1568
optional: true
1569
1564
- '@vitest/expect@3.1.4':
1565
- resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==}
1570
+ '@vitest/expect@3.2.0':
1571
+ resolution: {integrity: sha512-0v4YVbhDKX3SKoy0PHWXpKhj44w+3zZkIoVES9Ex2pq+u6+Bijijbi2ua5kE+h3qT6LBWFTNZSCOEU37H8Y5sA==}
1572
1567
- '@vitest/mocker@3.1.4':
1568
- resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==}
1573
+ '@vitest/mocker@3.2.0':
1574
+ resolution: {integrity: sha512-HFcW0lAMx3eN9vQqis63H0Pscv0QcVMo1Kv8BNysZbxcmHu3ZUYv59DS6BGYiGQ8F5lUkmsfMMlPm4DJFJdf/A==}
1575
peerDependencies:
1576
msw: ^2.4.9
1571
- vite: ^5.0.0 || ^6.0.0
1577
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
1578
peerDependenciesMeta:
1579
msw:
1580
optional: true
1581
vite:
1582
optional: true
1583
1578
- '@vitest/pretty-format@3.1.4':
1579
- resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==}
1584
+ '@vitest/pretty-format@3.2.0':
1585
+ resolution: {integrity: sha512-gUUhaUmPBHFkrqnOokmfMGRBMHhgpICud9nrz/xpNV3/4OXCn35oG+Pl8rYYsKaTNd/FAIrqRHnwpDpmYxCYZw==}
1586
1581
- '@vitest/runner@3.1.4':
1582
- resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==}
1587
+ '@vitest/runner@3.2.0':
1588
+ resolution: {integrity: sha512-bXdmnHxuB7fXJdh+8vvnlwi/m1zvu+I06i1dICVcDQFhyV4iKw2RExC/acavtDn93m/dRuawUObKsrNE1gJacA==}
1589
1584
- '@vitest/snapshot@3.1.4':
1585
- resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==}
1590
+ '@vitest/snapshot@3.2.0':
1591
+ resolution: {integrity: sha512-z7P/EneBRMe7hdvWhcHoXjhA6at0Q4ipcoZo6SqgxLyQQ8KSMMCmvw1cSt7FHib3ozt0wnRHc37ivuUMbxzG/A==}
1592
1587
- '@vitest/spy@3.1.4':
1588
- resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==}
1593
+ '@vitest/spy@3.2.0':
1594
+ resolution: {integrity: sha512-s3+TkCNUIEOX99S0JwNDfsHRaZDDZZR/n8F0mop0PmsEbQGKZikCGpTGZ6JRiHuONKew3Fb5//EPwCP+pUX9cw==}
1595
1590
- '@vitest/utils@3.1.4':
1591
- resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==}
1596
+ '@vitest/utils@3.2.0':
1597
+ resolution: {integrity: sha512-gXXOe7Fj6toCsZKVQouTRLJftJwmvbhH5lKOBR6rlP950zUq9AitTUjnFoXS/CqjBC2aoejAztLPzzuva++XBw==}
1598
1599
'@volar/language-core@2.4.14':
1600
resolution: {integrity: sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==}
@@ -2540,8 +2546,8 @@ packages:
2546
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
2547
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2548
2543
- eslint@9.27.0:
2544
- resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==}
2549
+ eslint@9.28.0:
2550
+ resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==}
2551
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2552
hasBin: true
2553
peerDependencies:
@@ -4071,8 +4077,8 @@ packages:
4077
safer-buffer@2.1.2:
4078
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
4079
4074
- sass@1.89.0:
4075
- resolution: {integrity: sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==}
4080
+ sass@1.89.1:
4081
+ resolution: {integrity: sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==}
4082
engines: {node: '>=14.0.0'}
4083
hasBin: true
4084
@@ -4330,16 +4336,16 @@ packages:
4336
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
4337
engines: {node: '>=12.0.0'}
4338
4333
- tinypool@1.0.2:
4334
- resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
4339
+ tinypool@1.1.0:
4340
+ resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==}
4341
engines: {node: ^18.0.0 || >=20.0.0}
4342
4343
tinyrainbow@2.0.0:
4344
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
4345
engines: {node: '>=14.0.0'}
4346
4341
- tinyspy@3.0.2:
4342
- resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
4347
+ tinyspy@4.0.3:
4348
+ resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
4349
engines: {node: '>=14.0.0'}
4350
4351
tldts-core@6.1.86:
@@ -4527,8 +4533,8 @@ packages:
4533
peerDependencies:
4534
vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0
4535
4530
- vite-node@3.1.4:
4531
- resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==}
4536
+ vite-node@3.2.0:
4537
+ resolution: {integrity: sha512-8Fc5Ko5Y4URIJkmMF/iFP1C0/OJyY+VGVe9Nw6WAdZyw4bTO+eVg9mwxWkQp/y8NnAoQY3o9KAvE1ZdA2v+Vmg==}
4538
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
4539
hasBin: true
4540
@@ -4598,16 +4604,16 @@ packages:
4604
yaml:
4605
optional: true
4606
4601
- vitest@3.1.4:
4602
- resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==}
4607
+ vitest@3.2.0:
4608
+ resolution: {integrity: sha512-P7Nvwuli8WBNmeMHHek7PnGW4oAZl9za1fddfRVidZar8wDZRi7hpznLKQePQ8JPLwSBEYDK11g+++j7uFJV8Q==}
4609
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
4610
hasBin: true
4611
peerDependencies:
4612
'@edge-runtime/vm': '*'
4613
'@types/debug': ^4.1.12
4614
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
4609
- '@vitest/browser': 3.1.4
4610
- '@vitest/ui': 3.1.4
4615
+ '@vitest/browser': 3.2.0
4616
+ '@vitest/ui': 3.2.0
4617
happy-dom: '*'
4618
jsdom: '*'
4619
peerDependenciesMeta:
@@ -4872,44 +4878,44 @@ snapshots:
4878
'@jridgewell/gen-mapping': 0.3.8
4879
'@jridgewell/trace-mapping': 0.3.25
4880
4875
- '@antfu/eslint-config@4.13.2(@vue/compiler-sfc@3.5.16)(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))':
4881
+ '@antfu/eslint-config@4.13.2(@vue/compiler-sfc@3.5.16)(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))':
4882
dependencies:
4883
'@antfu/install-pkg': 1.1.0
4884
'@clack/prompts': 0.10.1
4879
- '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.27.0(jiti@2.4.2))
4885
+ '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.28.0(jiti@2.4.2))
4886
'@eslint/markdown': 6.4.0
4881
- '@stylistic/eslint-plugin': 4.4.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
4882
- '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
4883
- '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
4884
- '@vitest/eslint-plugin': 1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
4887
+ '@stylistic/eslint-plugin': 4.4.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
4888
+ '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
4889
+ '@typescript-eslint/parser': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
4890
+ '@vitest/eslint-plugin': 1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
4891
ansis: 4.0.0
4892
cac: 6.7.14
4887
- eslint: 9.27.0(jiti@2.4.2)
4888
- eslint-config-flat-gitignore: 2.1.0(eslint@9.27.0(jiti@2.4.2))
4893
+ eslint: 9.28.0(jiti@2.4.2)
4894
+ eslint-config-flat-gitignore: 2.1.0(eslint@9.28.0(jiti@2.4.2))
4895
eslint-flat-config-utils: 2.1.0
4890
- eslint-merge-processors: 2.0.0(eslint@9.27.0(jiti@2.4.2))
4891
- eslint-plugin-antfu: 3.1.1(eslint@9.27.0(jiti@2.4.2))
4892
- eslint-plugin-command: 3.2.1(eslint@9.27.0(jiti@2.4.2))
4893
- eslint-plugin-import-x: 4.13.3(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
4894
- eslint-plugin-jsdoc: 50.6.17(eslint@9.27.0(jiti@2.4.2))
4895
- eslint-plugin-jsonc: 2.20.1(eslint@9.27.0(jiti@2.4.2))
4896
- eslint-plugin-n: 17.18.0(eslint@9.27.0(jiti@2.4.2))
4896
+ eslint-merge-processors: 2.0.0(eslint@9.28.0(jiti@2.4.2))
4897
+ eslint-plugin-antfu: 3.1.1(eslint@9.28.0(jiti@2.4.2))
4898
+ eslint-plugin-command: 3.2.1(eslint@9.28.0(jiti@2.4.2))
4899
+ eslint-plugin-import-x: 4.13.3(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
4900
+ eslint-plugin-jsdoc: 50.6.17(eslint@9.28.0(jiti@2.4.2))
4901
+ eslint-plugin-jsonc: 2.20.1(eslint@9.28.0(jiti@2.4.2))
4902
+ eslint-plugin-n: 17.18.0(eslint@9.28.0(jiti@2.4.2))
4903
eslint-plugin-no-only-tests: 3.3.0
4898
- eslint-plugin-perfectionist: 4.13.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
4899
- eslint-plugin-pnpm: 0.3.1(eslint@9.27.0(jiti@2.4.2))
4900
- eslint-plugin-regexp: 2.7.0(eslint@9.27.0(jiti@2.4.2))
4901
- eslint-plugin-toml: 0.12.0(eslint@9.27.0(jiti@2.4.2))
4902
- eslint-plugin-unicorn: 59.0.1(eslint@9.27.0(jiti@2.4.2))
4903
- eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))
4904
- eslint-plugin-vue: 10.1.0(eslint@9.27.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2)))
4905
- eslint-plugin-yml: 1.18.0(eslint@9.27.0(jiti@2.4.2))
4906
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.16)(eslint@9.27.0(jiti@2.4.2))
4904
+ eslint-plugin-perfectionist: 4.13.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
4905
+ eslint-plugin-pnpm: 0.3.1(eslint@9.28.0(jiti@2.4.2))
4906
+ eslint-plugin-regexp: 2.7.0(eslint@9.28.0(jiti@2.4.2))
4907
+ eslint-plugin-toml: 0.12.0(eslint@9.28.0(jiti@2.4.2))
4908
+ eslint-plugin-unicorn: 59.0.1(eslint@9.28.0(jiti@2.4.2))
4909
+ eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))
4910
+ eslint-plugin-vue: 10.1.0(eslint@9.28.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.28.0(jiti@2.4.2)))
4911
+ eslint-plugin-yml: 1.18.0(eslint@9.28.0(jiti@2.4.2))
4912
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.16)(eslint@9.28.0(jiti@2.4.2))
4913
globals: 16.2.0
4914
jsonc-eslint-parser: 2.4.0
4915
local-pkg: 1.1.1
4916
parse-gitignore: 2.0.0
4917
toml-eslint-parser: 0.10.0
4912
- vue-eslint-parser: 10.1.3(eslint@9.27.0(jiti@2.4.2))
4918
+ vue-eslint-parser: 10.1.3(eslint@9.28.0(jiti@2.4.2))
4919
yaml-eslint-parser: 1.3.0
4920
transitivePeerDependencies:
4921
- '@eslint/json'
@@ -5379,22 +5385,22 @@ snapshots:
5385
'@esbuild/win32-x64@0.25.5':
5386
optional: true
5387
5382
- '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.27.0(jiti@2.4.2))':
5388
+ '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.28.0(jiti@2.4.2))':
5389
dependencies:
5390
escape-string-regexp: 4.0.0
5385
- eslint: 9.27.0(jiti@2.4.2)
5391
+ eslint: 9.28.0(jiti@2.4.2)
5392
ignore: 5.3.2
5393
5388
- '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))':
5394
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))':
5395
dependencies:
5390
- eslint: 9.27.0(jiti@2.4.2)
5396
+ eslint: 9.28.0(jiti@2.4.2)
5397
eslint-visitor-keys: 3.4.3
5398
5399
'@eslint-community/regexpp@4.12.1': {}
5400
5395
- '@eslint/compat@1.2.9(eslint@9.27.0(jiti@2.4.2))':
5401
+ '@eslint/compat@1.2.9(eslint@9.28.0(jiti@2.4.2))':
5402
optionalDependencies:
5397
- eslint: 9.27.0(jiti@2.4.2)
5403
+ eslint: 9.28.0(jiti@2.4.2)
5404
5405
'@eslint/config-array@0.20.0':
5406
dependencies:
@@ -5432,7 +5438,7 @@ snapshots:
5438
transitivePeerDependencies:
5439
- supports-color
5440
5435
- '@eslint/js@9.27.0': {}
5441
+ '@eslint/js@9.28.0': {}
5442
5443
'@eslint/markdown@6.4.0':
5444
dependencies:
@@ -5465,7 +5471,7 @@ snapshots:
5471
5472
'@fontsource/jetbrains-mono@5.2.5': {}
5473
5468
- '@fontsource/lexend@5.2.7': {}
5474
+ '@fontsource/lexend@5.2.8': {}
5475
5476
'@fontsource/public-sans@5.2.5': {}
5477
@@ -5803,10 +5809,10 @@ snapshots:
5809
5810
'@sindresorhus/merge-streams@4.0.0': {}
5811
5806
- '@stylistic/eslint-plugin@4.4.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
5812
+ '@stylistic/eslint-plugin@4.4.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
5813
dependencies:
5808
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
5809
- eslint: 9.27.0(jiti@2.4.2)
5814
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
5815
+ eslint: 9.28.0(jiti@2.4.2)
5816
eslint-visitor-keys: 4.2.0
5817
espree: 10.3.0
5818
estraverse: 5.3.0
@@ -5898,12 +5904,12 @@ snapshots:
5904
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.8
5905
'@tailwindcss/oxide-win32-x64-msvc': 4.1.8
5906
5901
- '@tailwindcss/vite@4.1.8(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))':
5907
+ '@tailwindcss/vite@4.1.8(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))':
5908
dependencies:
5909
'@tailwindcss/node': 4.1.8
5910
'@tailwindcss/oxide': 4.1.8
5911
tailwindcss: 4.1.8
5906
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
5912
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
5913
5914
'@trysound/sax@0.2.0': {}
5915
@@ -5916,10 +5922,16 @@ snapshots:
5922
5923
'@types/bytes@3.1.5': {}
5924
5925
+ '@types/chai@5.2.2':
5926
+ dependencies:
5927
+ '@types/deep-eql': 4.0.2
5928
+
5929
'@types/debug@4.1.12':
5930
dependencies:
5931
'@types/ms': 2.1.0
5932
5933
+ '@types/deep-eql@4.0.2': {}
5934
+
5935
'@types/estree@1.0.7': {}
5936
5937
'@types/file-saver@2.0.7': {}
@@ -5927,7 +5939,7 @@ snapshots:
5939
'@types/fs-extra@11.0.4':
5940
dependencies:
5941
'@types/jsonfile': 6.1.4
5930
- '@types/node': 22.15.28
5942
+ '@types/node': 22.15.29
5943
5944
'@types/hast@3.0.4':
5945
dependencies:
@@ -5935,7 +5947,7 @@ snapshots:
5947
5948
'@types/jsdom@21.1.7':
5949
dependencies:
5938
- '@types/node': 22.15.28
5950
+ '@types/node': 22.15.29
5951
'@types/tough-cookie': 4.0.5
5952
parse5: 7.3.0
5953
@@ -5943,7 +5955,7 @@ snapshots:
5955
5956
'@types/jsonfile@6.1.4':
5957
dependencies:
5946
- '@types/node': 22.15.28
5958
+ '@types/node': 22.15.29
5959
5960
'@types/katex@0.16.7': {}
5961
@@ -5970,7 +5982,7 @@ snapshots:
5982
5983
'@types/ms@2.1.0': {}
5984
5973
- '@types/node@22.15.28':
5985
+ '@types/node@22.15.29':
5986
dependencies:
5987
undici-types: 6.21.0
5988
@@ -5990,18 +6002,18 @@ snapshots:
6002
6003
'@types/yauzl@2.10.3':
6004
dependencies:
5993
- '@types/node': 22.15.28
6005
+ '@types/node': 22.15.29
6006
optional: true
6007
5996
- '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
6008
+ '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
6009
dependencies:
6010
'@eslint-community/regexpp': 4.12.1
5999
- '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
6011
+ '@typescript-eslint/parser': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
6012
'@typescript-eslint/scope-manager': 8.33.0
6001
- '@typescript-eslint/type-utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
6002
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
6013
+ '@typescript-eslint/type-utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
6014
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
6015
'@typescript-eslint/visitor-keys': 8.33.0
6004
- eslint: 9.27.0(jiti@2.4.2)
6016
+ eslint: 9.28.0(jiti@2.4.2)
6017
graphemer: 1.4.0
6018
ignore: 7.0.4
6019
natural-compare: 1.4.0
@@ -6010,14 +6022,14 @@ snapshots:
6022
transitivePeerDependencies:
6023
- supports-color
6024
6013
- '@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
6025
+ '@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
6026
dependencies:
6027
'@typescript-eslint/scope-manager': 8.33.0
6028
'@typescript-eslint/types': 8.33.0
6029
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
6030
'@typescript-eslint/visitor-keys': 8.33.0
6031
debug: 4.4.1(supports-color@8.1.1)
6020
- eslint: 9.27.0(jiti@2.4.2)
6032
+ eslint: 9.28.0(jiti@2.4.2)
6033
typescript: 5.8.3
6034
transitivePeerDependencies:
6035
- supports-color
@@ -6040,12 +6052,12 @@ snapshots:
6052
dependencies:
6053
typescript: 5.8.3
6054
6043
- '@typescript-eslint/type-utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
6055
+ '@typescript-eslint/type-utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
6056
dependencies:
6057
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
6046
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
6058
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
6059
debug: 4.4.1(supports-color@8.1.1)
6048
- eslint: 9.27.0(jiti@2.4.2)
6060
+ eslint: 9.28.0(jiti@2.4.2)
6061
ts-api-utils: 2.1.0(typescript@5.8.3)
6062
typescript: 5.8.3
6063
transitivePeerDependencies:
@@ -6069,13 +6081,13 @@ snapshots:
6081
transitivePeerDependencies:
6082
- supports-color
6083
6072
- '@typescript-eslint/utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
6084
+ '@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
6085
dependencies:
6074
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
6086
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
6087
'@typescript-eslint/scope-manager': 8.33.0
6088
'@typescript-eslint/types': 8.33.0
6089
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
6078
- eslint: 9.27.0(jiti@2.4.2)
6090
+ eslint: 9.28.0(jiti@2.4.2)
6091
typescript: 5.8.3
6092
transitivePeerDependencies:
6093
- supports-color
@@ -6140,69 +6152,70 @@ snapshots:
6152
'@unrs/resolver-binding-win32-x64-msvc@1.7.5':
6153
optional: true
6154
6143
- '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6155
+ '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6156
dependencies:
6157
'@babel/core': 7.27.3
6158
'@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.3)
6159
'@rolldown/pluginutils': 1.0.0-beta.10
6160
'@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.3)
6149
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
6161
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
6162
vue: 3.5.16(typescript@5.8.3)
6163
transitivePeerDependencies:
6164
- supports-color
6165
6154
- '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6166
+ '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6167
dependencies:
6156
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
6168
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
6169
vue: 3.5.16(typescript@5.8.3)
6170
6159
- '@vitest/eslint-plugin@1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))':
6171
+ '@vitest/eslint-plugin@1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))':
6172
dependencies:
6161
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
6162
- eslint: 9.27.0(jiti@2.4.2)
6173
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
6174
+ eslint: 9.28.0(jiti@2.4.2)
6175
optionalDependencies:
6176
typescript: 5.8.3
6165
- vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
6177
+ vitest: 3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
6178
transitivePeerDependencies:
6179
- supports-color
6180
6169
- '@vitest/expect@3.1.4':
6181
+ '@vitest/expect@3.2.0':
6182
dependencies:
6171
- '@vitest/spy': 3.1.4
6172
- '@vitest/utils': 3.1.4
6183
+ '@types/chai': 5.2.2
6184
+ '@vitest/spy': 3.2.0
6185
+ '@vitest/utils': 3.2.0
6186
chai: 5.2.0
6187
tinyrainbow: 2.0.0
6188
6176
- '@vitest/mocker@3.1.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))':
6189
+ '@vitest/mocker@3.2.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))':
6190
dependencies:
6178
- '@vitest/spy': 3.1.4
6191
+ '@vitest/spy': 3.2.0
6192
estree-walker: 3.0.3
6193
magic-string: 0.30.17
6194
optionalDependencies:
6182
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
6195
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
6196
6184
- '@vitest/pretty-format@3.1.4':
6197
+ '@vitest/pretty-format@3.2.0':
6198
dependencies:
6199
tinyrainbow: 2.0.0
6200
6188
- '@vitest/runner@3.1.4':
6201
+ '@vitest/runner@3.2.0':
6202
dependencies:
6190
- '@vitest/utils': 3.1.4
6203
+ '@vitest/utils': 3.2.0
6204
pathe: 2.0.3
6205
6193
- '@vitest/snapshot@3.1.4':
6206
+ '@vitest/snapshot@3.2.0':
6207
dependencies:
6195
- '@vitest/pretty-format': 3.1.4
6208
+ '@vitest/pretty-format': 3.2.0
6209
magic-string: 0.30.17
6210
pathe: 2.0.3
6211
6199
- '@vitest/spy@3.1.4':
6212
+ '@vitest/spy@3.2.0':
6213
dependencies:
6201
- tinyspy: 3.0.2
6214
+ tinyspy: 4.0.3
6215
6203
- '@vitest/utils@3.1.4':
6216
+ '@vitest/utils@3.2.0':
6217
dependencies:
6205
- '@vitest/pretty-format': 3.1.4
6218
+ '@vitest/pretty-format': 3.2.0
6219
loupe: 3.1.3
6220
tinyrainbow: 2.0.0
6221
@@ -6318,14 +6331,14 @@ snapshots:
6331
dependencies:
6332
'@vue/devtools-kit': 7.7.6
6333
6321
- '@vue/devtools-core@7.7.6(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6334
+ '@vue/devtools-core@7.7.6(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))':
6335
dependencies:
6336
'@vue/devtools-kit': 7.7.6
6337
'@vue/devtools-shared': 7.7.6
6338
mitt: 3.0.1
6339
nanoid: 5.1.5
6340
pathe: 2.0.3
6328
- vite-hot-client: 2.0.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
6341
+ vite-hot-client: 2.0.4(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
6342
vue: 3.5.16(typescript@5.8.3)
6343
transitivePeerDependencies:
6344
- vite
@@ -7092,20 +7105,20 @@ snapshots:
7105
7106
escape-string-regexp@5.0.0: {}
7107
7095
- eslint-compat-utils@0.5.1(eslint@9.27.0(jiti@2.4.2)):
7108
+ eslint-compat-utils@0.5.1(eslint@9.28.0(jiti@2.4.2)):
7109
dependencies:
7097
- eslint: 9.27.0(jiti@2.4.2)
7110
+ eslint: 9.28.0(jiti@2.4.2)
7111
semver: 7.7.2
7112
7100
- eslint-compat-utils@0.6.5(eslint@9.27.0(jiti@2.4.2)):
7113
+ eslint-compat-utils@0.6.5(eslint@9.28.0(jiti@2.4.2)):
7114
dependencies:
7102
- eslint: 9.27.0(jiti@2.4.2)
7115
+ eslint: 9.28.0(jiti@2.4.2)
7116
semver: 7.7.2
7117
7105
- eslint-config-flat-gitignore@2.1.0(eslint@9.27.0(jiti@2.4.2)):
7118
+ eslint-config-flat-gitignore@2.1.0(eslint@9.28.0(jiti@2.4.2)):
7119
dependencies:
7107
- '@eslint/compat': 1.2.9(eslint@9.27.0(jiti@2.4.2))
7108
- eslint: 9.27.0(jiti@2.4.2)
7120
+ '@eslint/compat': 1.2.9(eslint@9.28.0(jiti@2.4.2))
7121
+ eslint: 9.28.0(jiti@2.4.2)
7122
7123
eslint-flat-config-utils@2.1.0:
7124
dependencies:
@@ -7126,38 +7139,38 @@ snapshots:
7139
transitivePeerDependencies:
7140
- supports-color
7141
7129
- eslint-json-compat-utils@0.2.1(eslint@9.27.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7142
+ eslint-json-compat-utils@0.2.1(eslint@9.28.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7143
dependencies:
7131
- eslint: 9.27.0(jiti@2.4.2)
7144
+ eslint: 9.28.0(jiti@2.4.2)
7145
esquery: 1.6.0
7146
jsonc-eslint-parser: 2.4.0
7147
7135
- eslint-merge-processors@2.0.0(eslint@9.27.0(jiti@2.4.2)):
7148
+ eslint-merge-processors@2.0.0(eslint@9.28.0(jiti@2.4.2)):
7149
dependencies:
7137
- eslint: 9.27.0(jiti@2.4.2)
7150
+ eslint: 9.28.0(jiti@2.4.2)
7151
7139
- eslint-plugin-antfu@3.1.1(eslint@9.27.0(jiti@2.4.2)):
7152
+ eslint-plugin-antfu@3.1.1(eslint@9.28.0(jiti@2.4.2)):
7153
dependencies:
7141
- eslint: 9.27.0(jiti@2.4.2)
7154
+ eslint: 9.28.0(jiti@2.4.2)
7155
7143
- eslint-plugin-command@3.2.1(eslint@9.27.0(jiti@2.4.2)):
7156
+ eslint-plugin-command@3.2.1(eslint@9.28.0(jiti@2.4.2)):
7157
dependencies:
7158
'@es-joy/jsdoccomment': 0.50.2
7146
- eslint: 9.27.0(jiti@2.4.2)
7159
+ eslint: 9.28.0(jiti@2.4.2)
7160
7148
- eslint-plugin-es-x@7.8.0(eslint@9.27.0(jiti@2.4.2)):
7161
+ eslint-plugin-es-x@7.8.0(eslint@9.28.0(jiti@2.4.2)):
7162
dependencies:
7150
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7163
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7164
'@eslint-community/regexpp': 4.12.1
7152
- eslint: 9.27.0(jiti@2.4.2)
7153
- eslint-compat-utils: 0.5.1(eslint@9.27.0(jiti@2.4.2))
7165
+ eslint: 9.28.0(jiti@2.4.2)
7166
+ eslint-compat-utils: 0.5.1(eslint@9.28.0(jiti@2.4.2))
7167
7155
- eslint-plugin-import-x@4.13.3(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
7168
+ eslint-plugin-import-x@4.13.3(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3):
7169
dependencies:
7157
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
7170
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
7171
comment-parser: 1.4.1
7172
debug: 4.4.1(supports-color@8.1.1)
7160
- eslint: 9.27.0(jiti@2.4.2)
7173
+ eslint: 9.28.0(jiti@2.4.2)
7174
eslint-import-context: 0.1.6(unrs-resolver@1.7.5)
7175
eslint-import-resolver-node: 0.3.9
7176
is-glob: 4.0.3
@@ -7170,14 +7183,14 @@ snapshots:
7183
- supports-color
7184
- typescript
7185
7173
- eslint-plugin-jsdoc@50.6.17(eslint@9.27.0(jiti@2.4.2)):
7186
+ eslint-plugin-jsdoc@50.6.17(eslint@9.28.0(jiti@2.4.2)):
7187
dependencies:
7188
'@es-joy/jsdoccomment': 0.50.2
7189
are-docs-informative: 0.0.2
7190
comment-parser: 1.4.1
7191
debug: 4.4.1(supports-color@8.1.1)
7192
escape-string-regexp: 4.0.0
7180
- eslint: 9.27.0(jiti@2.4.2)
7193
+ eslint: 9.28.0(jiti@2.4.2)
7194
espree: 10.3.0
7195
esquery: 1.6.0
7196
parse-imports-exports: 0.2.4
@@ -7186,12 +7199,12 @@ snapshots:
7199
transitivePeerDependencies:
7200
- supports-color
7201
7189
- eslint-plugin-jsonc@2.20.1(eslint@9.27.0(jiti@2.4.2)):
7202
+ eslint-plugin-jsonc@2.20.1(eslint@9.28.0(jiti@2.4.2)):
7203
dependencies:
7191
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7192
- eslint: 9.27.0(jiti@2.4.2)
7193
- eslint-compat-utils: 0.6.5(eslint@9.27.0(jiti@2.4.2))
7194
- eslint-json-compat-utils: 0.2.1(eslint@9.27.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7204
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7205
+ eslint: 9.28.0(jiti@2.4.2)
7206
+ eslint-compat-utils: 0.6.5(eslint@9.28.0(jiti@2.4.2))
7207
+ eslint-json-compat-utils: 0.2.1(eslint@9.28.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7208
espree: 10.3.0
7209
graphemer: 1.4.0
7210
jsonc-eslint-parser: 2.4.0
@@ -7200,12 +7213,12 @@ snapshots:
7213
transitivePeerDependencies:
7214
- '@eslint/json'
7215
7203
- eslint-plugin-n@17.18.0(eslint@9.27.0(jiti@2.4.2)):
7216
+ eslint-plugin-n@17.18.0(eslint@9.28.0(jiti@2.4.2)):
7217
dependencies:
7205
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7218
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7219
enhanced-resolve: 5.18.1
7207
- eslint: 9.27.0(jiti@2.4.2)
7208
- eslint-plugin-es-x: 7.8.0(eslint@9.27.0(jiti@2.4.2))
7220
+ eslint: 9.28.0(jiti@2.4.2)
7221
+ eslint-plugin-es-x: 7.8.0(eslint@9.28.0(jiti@2.4.2))
7222
get-tsconfig: 4.10.1
7223
globals: 15.15.0
7224
ignore: 5.3.2
@@ -7214,19 +7227,19 @@ snapshots:
7227
7228
eslint-plugin-no-only-tests@3.3.0: {}
7229
7217
- eslint-plugin-perfectionist@4.13.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
7230
+ eslint-plugin-perfectionist@4.13.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3):
7231
dependencies:
7232
'@typescript-eslint/types': 8.33.0
7220
- '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
7221
- eslint: 9.27.0(jiti@2.4.2)
7233
+ '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
7234
+ eslint: 9.28.0(jiti@2.4.2)
7235
natural-orderby: 5.0.0
7236
transitivePeerDependencies:
7237
- supports-color
7238
- typescript
7239
7227
- eslint-plugin-pnpm@0.3.1(eslint@9.27.0(jiti@2.4.2)):
7240
+ eslint-plugin-pnpm@0.3.1(eslint@9.28.0(jiti@2.4.2)):
7241
dependencies:
7229
- eslint: 9.27.0(jiti@2.4.2)
7242
+ eslint: 9.28.0(jiti@2.4.2)
7243
find-up-simple: 1.0.1
7244
jsonc-eslint-parser: 2.4.0
7245
pathe: 2.0.3
@@ -7234,36 +7247,36 @@ snapshots:
7247
tinyglobby: 0.2.14
7248
yaml-eslint-parser: 1.3.0
7249
7237
- eslint-plugin-regexp@2.7.0(eslint@9.27.0(jiti@2.4.2)):
7250
+ eslint-plugin-regexp@2.7.0(eslint@9.28.0(jiti@2.4.2)):
7251
dependencies:
7239
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7252
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7253
'@eslint-community/regexpp': 4.12.1
7254
comment-parser: 1.4.1
7242
- eslint: 9.27.0(jiti@2.4.2)
7255
+ eslint: 9.28.0(jiti@2.4.2)
7256
jsdoc-type-pratt-parser: 4.1.0
7257
refa: 0.12.1
7258
regexp-ast-analysis: 0.7.1
7259
scslre: 0.3.0
7260
7248
- eslint-plugin-toml@0.12.0(eslint@9.27.0(jiti@2.4.2)):
7261
+ eslint-plugin-toml@0.12.0(eslint@9.28.0(jiti@2.4.2)):
7262
dependencies:
7263
debug: 4.4.1(supports-color@8.1.1)
7251
- eslint: 9.27.0(jiti@2.4.2)
7252
- eslint-compat-utils: 0.6.5(eslint@9.27.0(jiti@2.4.2))
7264
+ eslint: 9.28.0(jiti@2.4.2)
7265
+ eslint-compat-utils: 0.6.5(eslint@9.28.0(jiti@2.4.2))
7266
lodash: 4.17.21
7267
toml-eslint-parser: 0.10.0
7268
transitivePeerDependencies:
7269
- supports-color
7270
7258
- eslint-plugin-unicorn@59.0.1(eslint@9.27.0(jiti@2.4.2)):
7271
+ eslint-plugin-unicorn@59.0.1(eslint@9.28.0(jiti@2.4.2)):
7272
dependencies:
7273
'@babel/helper-validator-identifier': 7.27.1
7261
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7274
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7275
'@eslint/plugin-kit': 0.2.8
7276
ci-info: 4.2.0
7277
clean-regexp: 1.0.0
7278
core-js-compat: 3.42.0
7266
- eslint: 9.27.0(jiti@2.4.2)
7279
+ eslint: 9.28.0(jiti@2.4.2)
7280
esquery: 1.6.0
7281
find-up-simple: 1.0.1
7282
globals: 16.2.0
@@ -7276,38 +7289,38 @@ snapshots:
7289
semver: 7.7.2
7290
strip-indent: 4.0.0
7291
7279
- eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)):
7292
+ eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2)):
7293
dependencies:
7281
- eslint: 9.27.0(jiti@2.4.2)
7294
+ eslint: 9.28.0(jiti@2.4.2)
7295
optionalDependencies:
7283
- '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
7296
+ '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
7297
7285
- eslint-plugin-vue@10.1.0(eslint@9.27.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2))):
7298
+ eslint-plugin-vue@10.1.0(eslint@9.28.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.28.0(jiti@2.4.2))):
7299
dependencies:
7287
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7288
- eslint: 9.27.0(jiti@2.4.2)
7300
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7301
+ eslint: 9.28.0(jiti@2.4.2)
7302
natural-compare: 1.4.0
7303
nth-check: 2.1.1
7304
postcss-selector-parser: 6.1.2
7305
semver: 7.7.2
7293
- vue-eslint-parser: 10.1.3(eslint@9.27.0(jiti@2.4.2))
7306
+ vue-eslint-parser: 10.1.3(eslint@9.28.0(jiti@2.4.2))
7307
xml-name-validator: 4.0.0
7308
7296
- eslint-plugin-yml@1.18.0(eslint@9.27.0(jiti@2.4.2)):
7309
+ eslint-plugin-yml@1.18.0(eslint@9.28.0(jiti@2.4.2)):
7310
dependencies:
7311
debug: 4.4.1(supports-color@8.1.1)
7312
escape-string-regexp: 4.0.0
7300
- eslint: 9.27.0(jiti@2.4.2)
7301
- eslint-compat-utils: 0.6.5(eslint@9.27.0(jiti@2.4.2))
7313
+ eslint: 9.28.0(jiti@2.4.2)
7314
+ eslint-compat-utils: 0.6.5(eslint@9.28.0(jiti@2.4.2))
7315
natural-compare: 1.4.0
7316
yaml-eslint-parser: 1.3.0
7317
transitivePeerDependencies:
7318
- supports-color
7319
7307
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.16)(eslint@9.27.0(jiti@2.4.2)):
7320
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.16)(eslint@9.28.0(jiti@2.4.2)):
7321
dependencies:
7322
'@vue/compiler-sfc': 3.5.16
7310
- eslint: 9.27.0(jiti@2.4.2)
7323
+ eslint: 9.28.0(jiti@2.4.2)
7324
7325
eslint-scope@8.3.0:
7326
dependencies:
@@ -7318,15 +7331,15 @@ snapshots:
7331
7332
eslint-visitor-keys@4.2.0: {}
7333
7321
- eslint@9.27.0(jiti@2.4.2):
7334
+ eslint@9.28.0(jiti@2.4.2):
7335
dependencies:
7323
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
7336
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
7337
'@eslint-community/regexpp': 4.12.1
7338
'@eslint/config-array': 0.20.0
7339
'@eslint/config-helpers': 0.2.2
7340
'@eslint/core': 0.14.0
7341
'@eslint/eslintrc': 3.3.1
7329
- '@eslint/js': 9.27.0
7342
+ '@eslint/js': 9.28.0
7343
'@eslint/plugin-kit': 0.3.1
7344
'@humanfs/node': 0.16.6
7345
'@humanwhocodes/module-importer': 1.0.1
@@ -8987,7 +9000,7 @@ snapshots:
9000
9001
safer-buffer@2.1.2: {}
9002
8990
- sass@1.89.0:
9003
+ sass@1.89.1:
9004
dependencies:
9005
chokidar: 4.0.3
9006
immutable: 5.1.2
@@ -9278,11 +9291,11 @@ snapshots:
9291
fdir: 6.4.5(picomatch@4.0.2)
9292
picomatch: 4.0.2
9293
9281
- tinypool@1.0.2: {}
9294
+ tinypool@1.1.0: {}
9295
9296
tinyrainbow@2.0.0: {}
9297
9285
- tinyspy@3.0.2: {}
9298
+ tinyspy@4.0.3: {}
9299
9300
tldts-core@6.1.86: {}
9301
@@ -9497,17 +9510,17 @@ snapshots:
9510
- rollup
9511
- supports-color
9512
9500
- vite-hot-client@2.0.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)):
9513
+ vite-hot-client@2.0.4(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)):
9514
dependencies:
9502
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9515
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9516
9504
- vite-node@3.1.4(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0):
9517
+ vite-node@3.2.0(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0):
9518
dependencies:
9519
cac: 6.7.14
9520
debug: 4.4.1(supports-color@8.1.1)
9521
es-module-lexer: 1.7.0
9522
pathe: 2.0.3
9510
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9523
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9524
transitivePeerDependencies:
9525
- '@types/node'
9526
- jiti
@@ -9522,7 +9535,7 @@ snapshots:
9535
- tsx
9536
- yaml
9537
9525
- vite-plugin-inspect@0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)):
9538
+ vite-plugin-inspect@0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)):
9539
dependencies:
9540
'@antfu/utils': 0.7.10
9541
'@rollup/pluginutils': 5.1.4(rollup@4.41.1)
@@ -9533,28 +9546,28 @@ snapshots:
9546
perfect-debounce: 1.0.0
9547
picocolors: 1.1.1
9548
sirv: 3.0.1
9536
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9549
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9550
transitivePeerDependencies:
9551
- rollup
9552
- supports-color
9553
9541
- vite-plugin-vue-devtools@7.7.6(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3)):
9554
+ vite-plugin-vue-devtools@7.7.6(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3)):
9555
dependencies:
9543
- '@vue/devtools-core': 7.7.6(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
9556
+ '@vue/devtools-core': 7.7.6(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))(vue@3.5.16(typescript@5.8.3))
9557
'@vue/devtools-kit': 7.7.6
9558
'@vue/devtools-shared': 7.7.6
9559
execa: 9.6.0
9560
sirv: 3.0.1
9548
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9549
- vite-plugin-inspect: 0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
9550
- vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
9561
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9562
+ vite-plugin-inspect: 0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
9563
+ vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
9564
transitivePeerDependencies:
9565
- '@nuxt/kit'
9566
- rollup
9567
- supports-color
9568
- vue
9569
9557
- vite-plugin-vue-inspector@5.3.1(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)):
9570
+ vite-plugin-vue-inspector@5.3.1(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)):
9571
dependencies:
9572
'@babel/core': 7.27.3
9573
'@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.3)
@@ -9565,7 +9578,7 @@ snapshots:
9578
'@vue/compiler-dom': 3.5.15
9579
kolorist: 1.8.0
9580
magic-string: 0.30.17
9568
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9581
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9582
transitivePeerDependencies:
9583
- supports-color
9584
@@ -9574,7 +9587,7 @@ snapshots:
9587
svgo: 3.3.2
9588
vue: 3.5.16(typescript@5.8.3)
9589
9577
- vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0):
9590
+ vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0):
9591
dependencies:
9592
esbuild: 0.25.5
9593
fdir: 6.4.5(picomatch@4.0.2)
@@ -9583,39 +9596,41 @@ snapshots:
9596
rollup: 4.41.1
9597
tinyglobby: 0.2.14
9598
optionalDependencies:
9586
- '@types/node': 22.15.28
9599
+ '@types/node': 22.15.29
9600
fsevents: 2.3.3
9601
jiti: 2.4.2
9602
lightningcss: 1.30.1
9590
- sass: 1.89.0
9603
+ sass: 1.89.1
9604
yaml: 2.8.0
9605
9593
- vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.28)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0):
9606
+ vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0):
9607
dependencies:
9595
- '@vitest/expect': 3.1.4
9596
- '@vitest/mocker': 3.1.4(vite@6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0))
9597
- '@vitest/pretty-format': 3.1.4
9598
- '@vitest/runner': 3.1.4
9599
- '@vitest/snapshot': 3.1.4
9600
- '@vitest/spy': 3.1.4
9601
- '@vitest/utils': 3.1.4
9608
+ '@types/chai': 5.2.2
9609
+ '@vitest/expect': 3.2.0
9610
+ '@vitest/mocker': 3.2.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0))
9611
+ '@vitest/pretty-format': 3.2.0
9612
+ '@vitest/runner': 3.2.0
9613
+ '@vitest/snapshot': 3.2.0
9614
+ '@vitest/spy': 3.2.0
9615
+ '@vitest/utils': 3.2.0
9616
chai: 5.2.0
9617
debug: 4.4.1(supports-color@8.1.1)
9618
expect-type: 1.2.1
9619
magic-string: 0.30.17
9620
pathe: 2.0.3
9621
+ picomatch: 4.0.2
9622
std-env: 3.9.0
9623
tinybench: 2.9.0
9624
tinyexec: 0.3.2
9625
tinyglobby: 0.2.14
9611
- tinypool: 1.0.2
9626
+ tinypool: 1.1.0
9627
tinyrainbow: 2.0.0
9613
- vite: 6.3.5(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9614
- vite-node: 3.1.4(@types/node@22.15.28)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(yaml@2.8.0)
9628
+ vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9629
+ vite-node: 3.2.0(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.1)(yaml@2.8.0)
9630
why-is-node-running: 2.3.0
9631
optionalDependencies:
9632
'@types/debug': 4.1.12
9618
- '@types/node': 22.15.28
9633
+ '@types/node': 22.15.29
9634
jsdom: 26.1.0
9635
transitivePeerDependencies:
9636
- jiti
@@ -9656,10 +9671,10 @@ snapshots:
9671
9672
vue-component-type-helpers@2.2.10: {}
9673
9659
- vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2)):
9674
+ vue-eslint-parser@10.1.3(eslint@9.28.0(jiti@2.4.2)):
9675
dependencies:
9676
debug: 4.4.1(supports-color@8.1.1)
9662
- eslint: 9.27.0(jiti@2.4.2)
9677
+ eslint: 9.28.0(jiti@2.4.2)
9678
eslint-scope: 8.3.0
9679
eslint-visitor-keys: 4.2.0
9680
espree: 10.3.0
frontend/src/components/mitre/TechniqueEvents/List.vue
+7
-1
@@ -37,7 +37,13 @@
37
<n-spin :show="loading">
38
<div class="my-3 flex min-h-28 flex-col gap-2">
39
<template v-if="alertsList.length">
40
- <TechniqueEventCard v-for="alert of alertsList" :key="alert.id" :alert embedded />
40
+ <TechniqueEventCard
41
+ v-for="alert of alertsList"
42
+ :key="alert.id"
43
+ :alert
44
+ embedded
45
+ use-details-tab
46
+ />
47
</template>
48
<template v-else>
49
<n-empty v-if="!loading" description="No items found" class="h-48 justify-center" />
frontend/src/components/mitre/TechniqueEvents/TechniqueEventCard.vue
+86
-79
@@ -134,88 +134,90 @@
134
</div>
135
</n-tab-pane>
136
137
- <n-tab-pane
138
- v-for="tabCard of tabsCards"
139
- :key="tabCard.tab"
140
- :name="tabCard.tab"
141
- :tab="tabCard.tab"
142
- display-directive="show"
143
- >
144
- <div v-if="tabCard.properties" class="grid-auto-fit-200 grid gap-2 p-7 pt-4">
145
- <CardKV v-for="(value, key) of tabCard.properties" :key="key">
146
- <template #key>
147
- {{ key }}
148
- </template>
149
- <template #value>
150
- {{ value || "-" }}
151
- </template>
152
- </CardKV>
153
- </div>
154
- </n-tab-pane>
137
+ <template v-if="!useDetailsTab">
138
+ <n-tab-pane
139
+ v-for="tabCard of tabsCards"
140
+ :key="tabCard.tab"
141
+ :name="tabCard.tab"
142
+ :tab="tabCard.tab"
143
+ display-directive="show"
144
+ >
145
+ <div v-if="tabCard.properties" class="grid-auto-fit-200 grid gap-2 p-7 pt-4">
146
+ <CardKV v-for="(value, key) of tabCard.properties" :key="key">
147
+ <template #key>
148
+ {{ key }}
149
+ </template>
150
+ <template #value>
151
+ {{ value || "-" }}
152
+ </template>
153
+ </CardKV>
154
+ </div>
155
+ </n-tab-pane>
156
156
- <n-tab-pane name="DNS" tab="DNS" display-directive="show">
157
- <div class="px-7 pt-4">
158
- <CardKV v-if="alert.data_dns_answers">
159
- <template #key>data_dns_answers</template>
160
- <template #value>
161
- <CodeSource :code="alert.data_dns_answers" :decode="false" />
162
- </template>
163
- </CardKV>
164
- </div>
165
- <div v-if="dnsProperties" class="grid-auto-fit-200 grid gap-2 p-7 pt-2">
166
- <CardKV v-for="(value, key) of dnsProperties" :key="key">
167
- <template #key>
168
- {{ key }}
169
- </template>
170
- <template #value>
171
- {{ value || "-" }}
172
- </template>
173
- </CardKV>
174
- </div>
175
- </n-tab-pane>
157
+ <n-tab-pane name="DNS" tab="DNS" display-directive="show">
158
+ <div class="px-7 pt-4">
159
+ <CardKV v-if="alert.data_dns_answers">
160
+ <template #key>data_dns_answers</template>
161
+ <template #value>
162
+ <CodeSource :code="alert.data_dns_answers" :decode="false" />
163
+ </template>
164
+ </CardKV>
165
+ </div>
166
+ <div v-if="dnsProperties" class="grid-auto-fit-200 grid gap-2 p-7 pt-2">
167
+ <CardKV v-for="(value, key) of dnsProperties" :key="key">
168
+ <template #key>
169
+ {{ key }}
170
+ </template>
171
+ <template #value>
172
+ {{ value || "-" }}
173
+ </template>
174
+ </CardKV>
175
+ </div>
176
+ </n-tab-pane>
177
177
- <n-tab-pane name="GL2" tab="GL2" display-directive="show">
178
- <div class="px-7 pt-4">
179
- <CardKV v-if="alert.gl2_processing_error">
180
- <template #key>gl2_processing_error</template>
181
- <template #value>
182
- {{ alert.gl2_processing_error }}
183
- </template>
184
- </CardKV>
185
- </div>
186
- <div v-if="gl2Properties" class="grid-auto-fit-200 grid gap-2 p-7 pt-2">
187
- <CardKV v-for="(value, key) of gl2Properties" :key="key">
188
- <template #key>
189
- {{ key }}
190
- </template>
191
- <template #value>
192
- {{ value || "-" }}
193
- </template>
194
- </CardKV>
195
- </div>
196
- </n-tab-pane>
178
+ <n-tab-pane name="GL2" tab="GL2" display-directive="show">
179
+ <div class="px-7 pt-4">
180
+ <CardKV v-if="alert.gl2_processing_error">
181
+ <template #key>gl2_processing_error</template>
182
+ <template #value>
183
+ {{ alert.gl2_processing_error }}
184
+ </template>
185
+ </CardKV>
186
+ </div>
187
+ <div v-if="gl2Properties" class="grid-auto-fit-200 grid gap-2 p-7 pt-2">
188
+ <CardKV v-for="(value, key) of gl2Properties" :key="key">
189
+ <template #key>
190
+ {{ key }}
191
+ </template>
192
+ <template #value>
193
+ {{ value || "-" }}
194
+ </template>
195
+ </CardKV>
196
+ </div>
197
+ </n-tab-pane>
198
198
- <n-tab-pane v-if="alert.message" name="Message" tab="Message" display-directive="show">
199
- <div class="p-7 pt-4">
200
- <CodeSource :code="alert.message" :decode="false" />
201
- </div>
202
- </n-tab-pane>
199
+ <n-tab-pane v-if="alert.message" name="Message" tab="Message" display-directive="show">
200
+ <div class="p-7 pt-4">
201
+ <CodeSource :code="alert.message" :decode="false" />
202
+ </div>
203
+ </n-tab-pane>
204
204
- <n-tab-pane v-if="alert.location" name="Location" tab="Location" display-directive="show">
205
- <div class="p-7 pt-4">
206
- <CodeSource :code="alert.location" :decode="false" />
207
- </div>
208
- </n-tab-pane>
205
+ <n-tab-pane v-if="alert.location" name="Location" tab="Location" display-directive="show">
206
+ <div class="p-7 pt-4">
207
+ <CodeSource :code="alert.location" :decode="false" />
208
+ </div>
209
+ </n-tab-pane>
210
210
- <n-tab-pane v-if="alert.streams?.length" name="Streams" tab="Streams" display-directive="show">
211
- <div class="flex flex-wrap gap-3 p-7 pt-4">
212
- <ul>
213
- <li v-for="stream of alert.streams" :key="stream">
214
- <code>{{ stream }}</code>
215
- </li>
216
- </ul>
217
- </div>
218
- </n-tab-pane>
211
+ <n-tab-pane v-if="alert.streams?.length" name="Streams" tab="Streams" display-directive="show">
212
+ <div class="flex flex-wrap gap-3 p-7 pt-4">
213
+ <ul>
214
+ <li v-for="stream of alert.streams" :key="stream">
215
+ <code>{{ stream }}</code>
216
+ </li>
217
+ </ul>
218
+ </div>
219
+ </n-tab-pane>
220
+ </template>
221
222
<n-tab-pane name="Details" tab="Details" display-directive="show:lazy">
223
<div class="p-7 pt-4">
@@ -240,10 +242,15 @@ import { useGoto } from "@/composables/useGoto"
242
import { useSettingsStore } from "@/stores/settings"
243
import { formatDate } from "@/utils"
244
243
-const props = defineProps<{ alert: MitreEventDetails; hideActions?: boolean; embedded?: boolean }>()
245
+const props = defineProps<{
246
+ alert: MitreEventDetails
247
+ hideActions?: boolean
248
+ embedded?: boolean
249
+ useDetailsTab?: boolean
250
+}>()
251
const CodeSource = defineAsyncComponent(() => import("@/components/common/CodeSource.vue"))
252
246
-const { alert, embedded } = toRefs(props)
253
+const { alert, embedded, useDetailsTab } = toRefs(props)
254
255
const InfoIcon = "carbon:information"
256
const TargetIcon = "zondicons:target"