@cryptotaxi247 / CoPilot / commits / d2410028

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"