@cryptotaxi247 / CoPilot / commits / 7a605554

General refactor 2 (#901)

* Refactor Feedback Dashboard components to enhance UI and functionality - Replaced MetricTile component with CardLink for a more streamlined display of metrics in FeedbackDashboardMetricTiles.vue. - Introduced a new computed property to dynamically generate metric tile configurations. - Updated FeedbackDashboardToolbar.vue to utilize a drawer component for better layout and user experience. - Removed the obsolete FeedbackMetricTile.vue file to clean up the codebase. * Implement Palace Consolidation component and refactor FeedbackDashboardToolbar - Added a new PalaceConsolidation.vue component to display detailed metrics and insights. - Updated FeedbackDashboardToolbar.vue to enhance the drawer component with improved styling and functionality. - Removed the obsolete PalaceConsolidationDrawer.vue file to streamline the codebase. * Refactor PalaceConsolidation component for improved UI and functionality - Updated the layout of upcoming expirations and near-duplicate candidates sections to utilize CardEntity components for better visual consistency. - Enhanced the display of lesson details and added new styling for badges and headers. - Introduced a computed property in CardEntity to manage footer visibility more effectively. - Added support for markdown highlighting in the highlighter utility by including the markdown language module. * format * Update .gitignore and remove obsolete rules file - Added .ai-rulez/ to .gitignore to exclude AI-related files from version control. - Deleted the obsolete .cursor/rules file as it is no longer needed. * Enhance .gitignore to include new AI-related files and directories - Added multiple AI-related files and directories to .gitignore to prevent them from being tracked by version control. - Included new skill documentation and agent files under the .agents/ directory for better organization and management of AI resources. * Refactor Event Search components for improved UI and functionality - Removed the no event sources warning from List.vue and integrated it into SearchForm.vue for better visibility. - Updated the layout of SearchForm.vue to enhance user experience, including a more organized structure and improved styling for form items. - Introduced a computed property to manage the display of the no event sources warning based on the selected customer and loading state. - Enhanced the search button functionality and updated icons for clarity. * Refactor Event Search components to enhance modularity and user experience - Introduced new EventSearchFilters and EventSearchResults components to streamline the event search functionality. - Removed redundant code from EventSearch.vue, improving maintainability and readability. - Enhanced the layout and organization of the event search interface for better usability. - Integrated loading states and improved event handling for a more responsive user experience. * Update event search components to improve loading state handling - Modified List.vue to pass the loading state as a prop to SearchForm.vue, enhancing the user experience during event searches. - Updated SearchForm.vue to utilize the new loadingEvents prop for better control over the loading indicator in the search button. * Refactor event search components for improved clarity and consistency - Updated SearchForm.vue to rename computed property from customerOptions to customersOptions for better clarity. - Modified EventSearchFilters.vue to change the icon name for the search button, enhancing visual consistency. - Reformatted import statements in EventSearchFilters.vue for improved readability. * Refactor event search components for improved layout and user experience - Updated SearchForm.vue and EventSearchFilters.vue to enhance the layout, making it more organized and user-friendly. - Modified the Lucene Query section to improve clarity and added autocomplete instructions. - Reformatted import statements for better readability and consistency across components. - Enhanced button functionality and styling for a more cohesive interface. * Enhance event search components for improved layout and user feedback - Updated SearchForm.vue and EventSearchFilters.vue to include user guidance for selecting customers and sources. - Improved button functionality by adding a toggle for time range modes and enhancing the search button's loading state. - Refactored layout for better organization and responsiveness, ensuring a more intuitive user experience. * Enhance EventSearchResults component for improved column management and layout - Changed button style from quaternary to text for better visual consistency. - Implemented column width resolution to ensure minimum width constraints. - Normalized column definitions to maintain consistent width settings across displayed columns. - Added horizontal scrolling support for the data table to improve usability with wider datasets. * Enhance EventSearchResults component with user guidance and layout improvements - Added a tooltip to inform users about clicking table rows for event details. - Wrapped the column configuration button in a flex container for better layout. - Imported NTooltip for enhanced user feedback and interaction. * Refactor event configuration components for improved layout and functionality - Updated ColumnConfigModal.vue to enhance the layout and user experience by simplifying the structure and improving the visibility of active columns. - Refactored EventDetailDrawer.vue to streamline the display of event details and improve the interaction with filter buttons. - Modified EventSearch.vue to integrate the EventDetailDrawer within a drawer component for better organization and user flow. * Add event configuration components for enhanced user interaction - Introduced ColumnConfig.vue to manage active columns with options to add, remove, and reorder columns. - Added EventDetail.vue to display event details with filtering capabilities for better data management. - Updated EventSearch.vue to integrate the new components, improving the overall layout and user experience. * refactor(events): Redesign column config UI * Enhance ColumnConfig and EventSearch components for improved field mapping handling - Updated ColumnConfig.vue to utilize NCard and NScrollbar for better UI organization and user experience. - Modified EventSearch.vue to manage field mappings and loading states, improving data handling during searches. - Enhanced EventSearchFilters.vue to emit field mappings and loading states, ensuring better communication between components. * Refactor EventDetail component for improved layout and user interaction - Enhanced the display of event fields with a more organized layout and improved styling. - Updated filter action buttons to include tooltips for better user guidance. - Changed the format for displaying null or undefined values to a more visually distinct character. * Refactor Dashboard components for improved layout and user experience - Updated DashboardCategoriesSection.vue and EnabledDashboardsSection.vue to replace NCard with a more flexible div structure. - Enhanced the header layout for both sections, improving visual organization and accessibility. - Maintained existing functionality while streamlining the component structure for better responsiveness. * Refactor DashboardCategoriesSection for improved layout and functionality - Updated the structure of DashboardCategoriesSection.vue to enhance the user experience with a more organized layout. - Introduced a drawer component for displaying selected category details, improving accessibility and interaction. - Maintained existing functionality while streamlining the component for better responsiveness and visual clarity. * Refactor DashboardCategoriesSection and introduce DashboardCategoryDrawerContent component - Simplified the structure of DashboardCategoriesSection.vue by replacing the header and template display with a new DashboardCategoryDrawerContent component. - Enhanced the organization of event source selection and template rendering, improving user interaction and accessibility. - Maintained existing functionality while streamlining the component for better responsiveness and clarity. * Refactor DashboardCategoryDrawerContent for improved template display - Removed the title prop from DashboardCategoryDrawerContent.vue to streamline the component. - Simplified the template display logic by directly rendering the template count when a category is selected. - Enhanced the overall structure for better readability and maintainability. * Refactor DashboardsBrowser and DashboardCategoriesSection for improved layout and functionality - Updated DashboardsBrowser.vue to enhance the layout with a new button for adding templates and improved customer selection. - Introduced a conditional rendering for alerts and dashboard sections based on customer selection, improving user experience. - Adjusted the width of the drawer in DashboardCategoriesSection.vue for better responsiveness. * Enhance DashboardCategoryDrawerContent and DashboardTemplateCard for improved user interaction - Updated DashboardCategoryDrawerContent.vue to include a message prompting users to select an event source before adding a template, enhancing clarity. - Refactored the footer of DashboardTemplateCard.vue to conditionally render the enable/disable button based on the template's state, improving user feedback and interaction. * Refactor chart components to handle undefined labels gracefully - Updated ChartBar.vue, ChartColumn.vue, ChartPie.vue, and their frontend counterparts to ensure that the `props.labels` are safely accessed, preventing potential errors when labels are undefined or empty. - Enhanced data mapping logic to use default empty arrays, improving robustness and user experience across chart components. * chore(deps): Update frontend dependencies * style: Apply consistent formatting * chore(deps): Remove chart lib, add rolldown * chore(deps): Update pnpm and dependencies * refactor(charts): Migrate to ECharts library * refactor(utils): Correct secure-ls module import * refactor(ui): Adjust component styles * build(deps): Upgrade Node.js to v24 --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>

taylor_socfortress committed Jun 1, 2026 at 20:46 UTC 7a60555433ba9893c7a1c5d204b437dd7517c1f4
54 files changed +5493 -4707
.cursor/rules deleted
-1
@@ -1 +0,0 @@
1 -/Users/linko/Projects/cursor-global/agent
\ No newline at end of file
.gitignore
+554 -4
@@ -69,9 +69,559 @@ frontend/tsconfig.node.tsbuildinfo
69 frontend/tsconfig.vitest.tsbuildinfo
70
71 # AI
72 -.agents/
72 AGENTS.md
74 -.cursor/hooks/state/continual-learning-index.json
75 -.cursor/hooks/state/continual-learning.json
76 -
73 +.agents/
74 +.cursor/
75 skills-lock.json
76 +.ai-rulez/
77 +
78 +# BEGIN ai-rulez (DO NOT EDIT - managed by ai-rulez)
79 +.agents/agents/code-reviewer.md
80 +.agents/agents/devops-engineer.md
81 +.agents/agents/docs-writer.md
82 +.agents/agents/release-engineer.md
83 +.agents/agents/security-auditor.md
84 +.agents/agents/test-writer.md
85 +.agents/skills/accessibility/SKILL.md
86 +.agents/skills/accessibility/references/A11Y-PATTERNS.md
87 +.agents/skills/accessibility/references/WCAG.md
88 +.agents/skills/ai-rulez/SKILL.md
89 +.agents/skills/antfu/SKILL.md
90 +.agents/skills/antfu/references/antfu-eslint-config.md
91 +.agents/skills/antfu/references/app-development.md
92 +.agents/skills/antfu/references/library-development.md
93 +.agents/skills/antfu/references/monorepo.md
94 +.agents/skills/antfu/references/setting-up.md
95 +.agents/skills/best-practices/SKILL.md
96 +.agents/skills/code-reviewer/SKILL.md
97 +.agents/skills/core-web-vitals/SKILL.md
98 +.agents/skills/core-web-vitals/references/LCP.md
99 +.agents/skills/documentation/SKILL.md
100 +.agents/skills/echarts/SKILL.md
101 +.agents/skills/email-html-mjml/SKILL.md
102 +.agents/skills/email-html-mjml/assets/examples/basic-layout.mjml
103 +.agents/skills/gsap-core/SKILL.md
104 +.agents/skills/gsap-frameworks/SKILL.md
105 +.agents/skills/gsap-performance/SKILL.md
106 +.agents/skills/gsap-plugins/SKILL.md
107 +.agents/skills/gsap-react/SKILL.md
108 +.agents/skills/gsap-scrolltrigger/SKILL.md
109 +.agents/skills/gsap-timeline/SKILL.md
110 +.agents/skills/gsap-utils/SKILL.md
111 +.agents/skills/naive-ui/SKILL.md
112 +.agents/skills/naive-ui/references/component-catalog.md
113 +.agents/skills/naive-ui/references/v-model-patterns.md
114 +.agents/skills/nuxt/SKILL.md
115 +.agents/skills/nuxt/references/advanced-hooks.md
116 +.agents/skills/nuxt/references/advanced-layers.md
117 +.agents/skills/nuxt/references/advanced-module-authoring.md
118 +.agents/skills/nuxt/references/best-practices-data-fetching.md
119 +.agents/skills/nuxt/references/best-practices-ssr.md
120 +.agents/skills/nuxt/references/core-cli.md
121 +.agents/skills/nuxt/references/core-config.md
122 +.agents/skills/nuxt/references/core-data-fetching.md
123 +.agents/skills/nuxt/references/core-deployment.md
124 +.agents/skills/nuxt/references/core-directory-structure.md
125 +.agents/skills/nuxt/references/core-modules.md
126 +.agents/skills/nuxt/references/core-routing.md
127 +.agents/skills/nuxt/references/features-components-autoimport.md
128 +.agents/skills/nuxt/references/features-components.md
129 +.agents/skills/nuxt/references/features-composables.md
130 +.agents/skills/nuxt/references/features-server.md
131 +.agents/skills/nuxt/references/features-state.md
132 +.agents/skills/nuxt/references/rendering-modes.md
133 +.agents/skills/oauth/SKILL.md
134 +.agents/skills/performance/SKILL.md
135 +.agents/skills/pinia/SKILL.md
136 +.agents/skills/pinia/references/advanced-hmr.md
137 +.agents/skills/pinia/references/advanced-nuxt.md
138 +.agents/skills/pinia/references/advanced-ssr.md
139 +.agents/skills/pinia/references/best-practices-outside-component.md
140 +.agents/skills/pinia/references/best-practices-testing.md
141 +.agents/skills/pinia/references/core-stores.md
142 +.agents/skills/pinia/references/features-composables.md
143 +.agents/skills/pinia/references/features-composing-stores.md
144 +.agents/skills/pinia/references/features-plugins.md
145 +.agents/skills/pnpm/SKILL.md
146 +.agents/skills/pnpm/references/best-practices-ci.md
147 +.agents/skills/pnpm/references/best-practices-migration.md
148 +.agents/skills/pnpm/references/best-practices-performance.md
149 +.agents/skills/pnpm/references/core-cli.md
150 +.agents/skills/pnpm/references/core-config.md
151 +.agents/skills/pnpm/references/core-store.md
152 +.agents/skills/pnpm/references/core-workspaces.md
153 +.agents/skills/pnpm/references/features-aliases.md
154 +.agents/skills/pnpm/references/features-catalogs.md
155 +.agents/skills/pnpm/references/features-hooks.md
156 +.agents/skills/pnpm/references/features-overrides.md
157 +.agents/skills/pnpm/references/features-patches.md
158 +.agents/skills/pnpm/references/features-peer-deps.md
159 +.agents/skills/sentry-browser-sdk/SKILL.md
160 +.agents/skills/sentry-browser-sdk/references/error-monitoring.md
161 +.agents/skills/sentry-browser-sdk/references/logging.md
162 +.agents/skills/sentry-browser-sdk/references/profiling.md
163 +.agents/skills/sentry-browser-sdk/references/session-replay.md
164 +.agents/skills/sentry-browser-sdk/references/tracing.md
165 +.agents/skills/sentry-browser-sdk/references/user-feedback.md
166 +.agents/skills/sentry-node-sdk/SKILL.md
167 +.agents/skills/sentry-node-sdk/references/ai-monitoring.md
168 +.agents/skills/sentry-node-sdk/references/crons.md
169 +.agents/skills/sentry-node-sdk/references/error-monitoring.md
170 +.agents/skills/sentry-node-sdk/references/logging.md
171 +.agents/skills/sentry-node-sdk/references/metrics.md
172 +.agents/skills/sentry-node-sdk/references/profiling.md
173 +.agents/skills/sentry-node-sdk/references/tracing.md
174 +.agents/skills/sentry-sdk-setup/SKILL.md
175 +.agents/skills/seo/SKILL.md
176 +.agents/skills/skill-optimizer/SKILL.md
177 +.agents/skills/tsdown/SKILL.md
178 +.agents/skills/tsdown/references/README.md
179 +.agents/skills/tsdown/references/advanced-benchmark.md
180 +.agents/skills/tsdown/references/advanced-ci.md
181 +.agents/skills/tsdown/references/advanced-hooks.md
182 +.agents/skills/tsdown/references/advanced-plugins.md
183 +.agents/skills/tsdown/references/advanced-programmatic.md
184 +.agents/skills/tsdown/references/advanced-rolldown-options.md
185 +.agents/skills/tsdown/references/guide-getting-started.md
186 +.agents/skills/tsdown/references/guide-introduction.md
187 +.agents/skills/tsdown/references/guide-migrate-from-tsup.md
188 +.agents/skills/tsdown/references/option-cjs-default.md
189 +.agents/skills/tsdown/references/option-cleaning.md
190 +.agents/skills/tsdown/references/option-config-file.md
191 +.agents/skills/tsdown/references/option-css.md
192 +.agents/skills/tsdown/references/option-dependencies.md
193 +.agents/skills/tsdown/references/option-dts.md
194 +.agents/skills/tsdown/references/option-entry.md
195 +.agents/skills/tsdown/references/option-exe.md
196 +.agents/skills/tsdown/references/option-lint.md
197 +.agents/skills/tsdown/references/option-log-level.md
198 +.agents/skills/tsdown/references/option-minification.md
199 +.agents/skills/tsdown/references/option-output-directory.md
200 +.agents/skills/tsdown/references/option-output-format.md
201 +.agents/skills/tsdown/references/option-package-exports.md
202 +.agents/skills/tsdown/references/option-platform.md
203 +.agents/skills/tsdown/references/option-root.md
204 +.agents/skills/tsdown/references/option-shims.md
205 +.agents/skills/tsdown/references/option-sourcemap.md
206 +.agents/skills/tsdown/references/option-target.md
207 +.agents/skills/tsdown/references/option-tree-shaking.md
208 +.agents/skills/tsdown/references/option-unbundle.md
209 +.agents/skills/tsdown/references/option-watch-mode.md
210 +.agents/skills/tsdown/references/recipe-react.md
211 +.agents/skills/tsdown/references/recipe-solid.md
212 +.agents/skills/tsdown/references/recipe-svelte.md
213 +.agents/skills/tsdown/references/recipe-vue.md
214 +.agents/skills/tsdown/references/recipe-wasm.md
215 +.agents/skills/tsdown/references/reference-cli.md
216 +.agents/skills/typescript-magician/SKILL.md
217 +.agents/skills/unocss/SKILL.md
218 +.agents/skills/unocss/references/core-config.md
219 +.agents/skills/unocss/references/core-extracting.md
220 +.agents/skills/unocss/references/core-layers.md
221 +.agents/skills/unocss/references/core-rules.md
222 +.agents/skills/unocss/references/core-safelist.md
223 +.agents/skills/unocss/references/core-shortcuts.md
224 +.agents/skills/unocss/references/core-theme.md
225 +.agents/skills/unocss/references/core-variants.md
226 +.agents/skills/unocss/references/integrations-nuxt.md
227 +.agents/skills/unocss/references/integrations-vite.md
228 +.agents/skills/unocss/references/preset-attributify.md
229 +.agents/skills/unocss/references/preset-icons.md
230 +.agents/skills/unocss/references/preset-mini.md
231 +.agents/skills/unocss/references/preset-rem-to-px.md
232 +.agents/skills/unocss/references/preset-tagify.md
233 +.agents/skills/unocss/references/preset-typography.md
234 +.agents/skills/unocss/references/preset-web-fonts.md
235 +.agents/skills/unocss/references/preset-wind3.md
236 +.agents/skills/unocss/references/preset-wind4.md
237 +.agents/skills/unocss/references/transformer-attributify-jsx.md
238 +.agents/skills/unocss/references/transformer-compile-class.md
239 +.agents/skills/unocss/references/transformer-directives.md
240 +.agents/skills/unocss/references/transformer-variant-group.md
241 +.agents/skills/vite/SKILL.md
242 +.agents/skills/vite/references/build-and-ssr.md
243 +.agents/skills/vite/references/core-config.md
244 +.agents/skills/vite/references/core-features.md
245 +.agents/skills/vite/references/core-plugin-api.md
246 +.agents/skills/vite/references/environment-api.md
247 +.agents/skills/vite/references/rolldown-migration.md
248 +.agents/skills/vitepress/SKILL.md
249 +.agents/skills/vitepress/references/advanced-i18n.md
250 +.agents/skills/vitepress/references/advanced-ssr.md
251 +.agents/skills/vitepress/references/core-cli.md
252 +.agents/skills/vitepress/references/core-config.md
253 +.agents/skills/vitepress/references/core-markdown.md
254 +.agents/skills/vitepress/references/core-routing.md
255 +.agents/skills/vitepress/references/features-code-blocks.md
256 +.agents/skills/vitepress/references/features-data-loading.md
257 +.agents/skills/vitepress/references/features-dynamic-routes.md
258 +.agents/skills/vitepress/references/features-vue.md
259 +.agents/skills/vitepress/references/recipes-deploy.md
260 +.agents/skills/vitepress/references/theme-config.md
261 +.agents/skills/vitepress/references/theme-custom.md
262 +.agents/skills/vitepress/references/theme-customization.md
263 +.agents/skills/vitest/SKILL.md
264 +.agents/skills/vitest/references/advanced-environments.md
265 +.agents/skills/vitest/references/advanced-projects.md
266 +.agents/skills/vitest/references/advanced-type-testing.md
267 +.agents/skills/vitest/references/advanced-vi.md
268 +.agents/skills/vitest/references/core-cli.md
269 +.agents/skills/vitest/references/core-config.md
270 +.agents/skills/vitest/references/core-describe.md
271 +.agents/skills/vitest/references/core-expect.md
272 +.agents/skills/vitest/references/core-hooks.md
273 +.agents/skills/vitest/references/core-test-api.md
274 +.agents/skills/vitest/references/features-concurrency.md
275 +.agents/skills/vitest/references/features-context.md
276 +.agents/skills/vitest/references/features-coverage.md
277 +.agents/skills/vitest/references/features-filtering.md
278 +.agents/skills/vitest/references/features-mocking.md
279 +.agents/skills/vitest/references/features-snapshots.md
280 +.agents/skills/vue-best-practices/SKILL.md
281 +.agents/skills/vue-best-practices/references/animation-class-based-technique.md
282 +.agents/skills/vue-best-practices/references/animation-state-driven-technique.md
283 +.agents/skills/vue-best-practices/references/component-async.md
284 +.agents/skills/vue-best-practices/references/component-data-flow.md
285 +.agents/skills/vue-best-practices/references/component-fallthrough-attrs.md
286 +.agents/skills/vue-best-practices/references/component-keep-alive.md
287 +.agents/skills/vue-best-practices/references/component-slots.md
288 +.agents/skills/vue-best-practices/references/component-suspense.md
289 +.agents/skills/vue-best-practices/references/component-teleport.md
290 +.agents/skills/vue-best-practices/references/component-transition-group.md
291 +.agents/skills/vue-best-practices/references/component-transition.md
292 +.agents/skills/vue-best-practices/references/composables.md
293 +.agents/skills/vue-best-practices/references/directives.md
294 +.agents/skills/vue-best-practices/references/perf-avoid-component-abstraction-in-lists.md
295 +.agents/skills/vue-best-practices/references/perf-v-once-v-memo-directives.md
296 +.agents/skills/vue-best-practices/references/perf-virtualize-large-lists.md
297 +.agents/skills/vue-best-practices/references/plugins.md
298 +.agents/skills/vue-best-practices/references/reactivity.md
299 +.agents/skills/vue-best-practices/references/render-functions.md
300 +.agents/skills/vue-best-practices/references/sfc.md
301 +.agents/skills/vue-best-practices/references/state-management.md
302 +.agents/skills/vue-best-practices/references/updated-hook-performance.md
303 +.agents/skills/vue-router-best-practices/SKILL.md
304 +.agents/skills/vue-testing-best-practices/SKILL.md
305 +.agents/skills/vue/SKILL.md
306 +.agents/skills/vue/references/advanced-patterns.md
307 +.agents/skills/vue/references/core-new-apis.md
308 +.agents/skills/vue/references/script-setup-macros.md
309 +.agents/skills/vueuse-functions/SKILL.md
310 +.agents/skills/vueuse-functions/references/computedAsync.md
311 +.agents/skills/vueuse-functions/references/computedEager.md
312 +.agents/skills/vueuse-functions/references/computedInject.md
313 +.agents/skills/vueuse-functions/references/computedWithControl.md
314 +.agents/skills/vueuse-functions/references/createEventHook.md
315 +.agents/skills/vueuse-functions/references/createGenericProjection.md
316 +.agents/skills/vueuse-functions/references/createGlobalState.md
317 +.agents/skills/vueuse-functions/references/createInjectionState.md
318 +.agents/skills/vueuse-functions/references/createProjection.md
319 +.agents/skills/vueuse-functions/references/createRef.md
320 +.agents/skills/vueuse-functions/references/createReusableTemplate.md
321 +.agents/skills/vueuse-functions/references/createSharedComposable.md
322 +.agents/skills/vueuse-functions/references/createTemplatePromise.md
323 +.agents/skills/vueuse-functions/references/createUnrefFn.md
324 +.agents/skills/vueuse-functions/references/extendRef.md
325 +.agents/skills/vueuse-functions/references/from.md
326 +.agents/skills/vueuse-functions/references/get.md
327 +.agents/skills/vueuse-functions/references/injectLocal.md
328 +.agents/skills/vueuse-functions/references/isDefined.md
329 +.agents/skills/vueuse-functions/references/logicAnd.md
330 +.agents/skills/vueuse-functions/references/logicNot.md
331 +.agents/skills/vueuse-functions/references/logicOr.md
332 +.agents/skills/vueuse-functions/references/makeDestructurable.md
333 +.agents/skills/vueuse-functions/references/onClickOutside.md
334 +.agents/skills/vueuse-functions/references/onElementRemoval.md
335 +.agents/skills/vueuse-functions/references/onKeyStroke.md
336 +.agents/skills/vueuse-functions/references/onLongPress.md
337 +.agents/skills/vueuse-functions/references/onStartTyping.md
338 +.agents/skills/vueuse-functions/references/provideLocal.md
339 +.agents/skills/vueuse-functions/references/reactify.md
340 +.agents/skills/vueuse-functions/references/reactifyObject.md
341 +.agents/skills/vueuse-functions/references/reactiveComputed.md
342 +.agents/skills/vueuse-functions/references/reactiveOmit.md
343 +.agents/skills/vueuse-functions/references/reactivePick.md
344 +.agents/skills/vueuse-functions/references/refAutoReset.md
345 +.agents/skills/vueuse-functions/references/refDebounced.md
346 +.agents/skills/vueuse-functions/references/refDefault.md
347 +.agents/skills/vueuse-functions/references/refManualReset.md
348 +.agents/skills/vueuse-functions/references/refThrottled.md
349 +.agents/skills/vueuse-functions/references/refWithControl.md
350 +.agents/skills/vueuse-functions/references/set.md
351 +.agents/skills/vueuse-functions/references/syncRef.md
352 +.agents/skills/vueuse-functions/references/syncRefs.md
353 +.agents/skills/vueuse-functions/references/templateRef.md
354 +.agents/skills/vueuse-functions/references/toObserver.md
355 +.agents/skills/vueuse-functions/references/toReactive.md
356 +.agents/skills/vueuse-functions/references/toRef.md
357 +.agents/skills/vueuse-functions/references/toRefs.md
358 +.agents/skills/vueuse-functions/references/tryOnBeforeMount.md
359 +.agents/skills/vueuse-functions/references/tryOnBeforeUnmount.md
360 +.agents/skills/vueuse-functions/references/tryOnMounted.md
361 +.agents/skills/vueuse-functions/references/tryOnScopeDispose.md
362 +.agents/skills/vueuse-functions/references/tryOnUnmounted.md
363 +.agents/skills/vueuse-functions/references/unrefElement.md
364 +.agents/skills/vueuse-functions/references/until.md
365 +.agents/skills/vueuse-functions/references/useAbs.md
366 +.agents/skills/vueuse-functions/references/useActiveElement.md
367 +.agents/skills/vueuse-functions/references/useAnimate.md
368 +.agents/skills/vueuse-functions/references/useArrayDifference.md
369 +.agents/skills/vueuse-functions/references/useArrayEvery.md
370 +.agents/skills/vueuse-functions/references/useArrayFilter.md
371 +.agents/skills/vueuse-functions/references/useArrayFind.md
372 +.agents/skills/vueuse-functions/references/useArrayFindIndex.md
373 +.agents/skills/vueuse-functions/references/useArrayFindLast.md
374 +.agents/skills/vueuse-functions/references/useArrayIncludes.md
375 +.agents/skills/vueuse-functions/references/useArrayJoin.md
376 +.agents/skills/vueuse-functions/references/useArrayMap.md
377 +.agents/skills/vueuse-functions/references/useArrayReduce.md
378 +.agents/skills/vueuse-functions/references/useArraySome.md
379 +.agents/skills/vueuse-functions/references/useArrayUnique.md
380 +.agents/skills/vueuse-functions/references/useAsyncQueue.md
381 +.agents/skills/vueuse-functions/references/useAsyncState.md
382 +.agents/skills/vueuse-functions/references/useAsyncValidator.md
383 +.agents/skills/vueuse-functions/references/useAuth.md
384 +.agents/skills/vueuse-functions/references/useAverage.md
385 +.agents/skills/vueuse-functions/references/useAxios.md
386 +.agents/skills/vueuse-functions/references/useBase64.md
387 +.agents/skills/vueuse-functions/references/useBattery.md
388 +.agents/skills/vueuse-functions/references/useBluetooth.md
389 +.agents/skills/vueuse-functions/references/useBreakpoints.md
390 +.agents/skills/vueuse-functions/references/useBroadcastChannel.md
391 +.agents/skills/vueuse-functions/references/useBrowserLocation.md
392 +.agents/skills/vueuse-functions/references/useCached.md
393 +.agents/skills/vueuse-functions/references/useCeil.md
394 +.agents/skills/vueuse-functions/references/useChangeCase.md
395 +.agents/skills/vueuse-functions/references/useClamp.md
396 +.agents/skills/vueuse-functions/references/useClipboard.md
397 +.agents/skills/vueuse-functions/references/useClipboardItems.md
398 +.agents/skills/vueuse-functions/references/useCloned.md
399 +.agents/skills/vueuse-functions/references/useColorMode.md
400 +.agents/skills/vueuse-functions/references/useConfirmDialog.md
401 +.agents/skills/vueuse-functions/references/useCookies.md
402 +.agents/skills/vueuse-functions/references/useCountdown.md
403 +.agents/skills/vueuse-functions/references/useCounter.md
404 +.agents/skills/vueuse-functions/references/useCssSupports.md
405 +.agents/skills/vueuse-functions/references/useCssVar.md
406 +.agents/skills/vueuse-functions/references/useCurrentElement.md
407 +.agents/skills/vueuse-functions/references/useCycleList.md
408 +.agents/skills/vueuse-functions/references/useDark.md
409 +.agents/skills/vueuse-functions/references/useDateFormat.md
410 +.agents/skills/vueuse-functions/references/useDebounceFn.md
411 +.agents/skills/vueuse-functions/references/useDebouncedRefHistory.md
412 +.agents/skills/vueuse-functions/references/useDeviceMotion.md
413 +.agents/skills/vueuse-functions/references/useDeviceOrientation.md
414 +.agents/skills/vueuse-functions/references/useDevicePixelRatio.md
415 +.agents/skills/vueuse-functions/references/useDevicesList.md
416 +.agents/skills/vueuse-functions/references/useDisplayMedia.md
417 +.agents/skills/vueuse-functions/references/useDocumentVisibility.md
418 +.agents/skills/vueuse-functions/references/useDraggable.md
419 +.agents/skills/vueuse-functions/references/useDrauu.md
420 +.agents/skills/vueuse-functions/references/useDropZone.md
421 +.agents/skills/vueuse-functions/references/useElementBounding.md
422 +.agents/skills/vueuse-functions/references/useElementByPoint.md
423 +.agents/skills/vueuse-functions/references/useElementHover.md
424 +.agents/skills/vueuse-functions/references/useElementSize.md
425 +.agents/skills/vueuse-functions/references/useElementVisibility.md
426 +.agents/skills/vueuse-functions/references/useEventBus.md
427 +.agents/skills/vueuse-functions/references/useEventListener.md
428 +.agents/skills/vueuse-functions/references/useEventSource.md
429 +.agents/skills/vueuse-functions/references/useExtractedObservable.md
430 +.agents/skills/vueuse-functions/references/useEyeDropper.md
431 +.agents/skills/vueuse-functions/references/useFavicon.md
432 +.agents/skills/vueuse-functions/references/useFetch.md
433 +.agents/skills/vueuse-functions/references/useFileDialog.md
434 +.agents/skills/vueuse-functions/references/useFileSystemAccess.md
435 +.agents/skills/vueuse-functions/references/useFirestore.md
436 +.agents/skills/vueuse-functions/references/useFloor.md
437 +.agents/skills/vueuse-functions/references/useFocus.md
438 +.agents/skills/vueuse-functions/references/useFocusTrap.md
439 +.agents/skills/vueuse-functions/references/useFocusWithin.md
440 +.agents/skills/vueuse-functions/references/useFps.md
441 +.agents/skills/vueuse-functions/references/useFullscreen.md
442 +.agents/skills/vueuse-functions/references/useFuse.md
443 +.agents/skills/vueuse-functions/references/useGamepad.md
444 +.agents/skills/vueuse-functions/references/useGeolocation.md
445 +.agents/skills/vueuse-functions/references/useIDBKeyval.md
446 +.agents/skills/vueuse-functions/references/useIdle.md
447 +.agents/skills/vueuse-functions/references/useImage.md
448 +.agents/skills/vueuse-functions/references/useInfiniteScroll.md
449 +.agents/skills/vueuse-functions/references/useIntersectionObserver.md
450 +.agents/skills/vueuse-functions/references/useInterval.md
451 +.agents/skills/vueuse-functions/references/useIntervalFn.md
452 +.agents/skills/vueuse-functions/references/useIpcRenderer.md
453 +.agents/skills/vueuse-functions/references/useIpcRendererInvoke.md
454 +.agents/skills/vueuse-functions/references/useIpcRendererOn.md
455 +.agents/skills/vueuse-functions/references/useJwt.md
456 +.agents/skills/vueuse-functions/references/useKeyModifier.md
457 +.agents/skills/vueuse-functions/references/useLastChanged.md
458 +.agents/skills/vueuse-functions/references/useLocalStorage.md
459 +.agents/skills/vueuse-functions/references/useMagicKeys.md
460 +.agents/skills/vueuse-functions/references/useManualRefHistory.md
461 +.agents/skills/vueuse-functions/references/useMath.md
462 +.agents/skills/vueuse-functions/references/useMax.md
463 +.agents/skills/vueuse-functions/references/useMediaControls.md
464 +.agents/skills/vueuse-functions/references/useMediaQuery.md
465 +.agents/skills/vueuse-functions/references/useMemoize.md
466 +.agents/skills/vueuse-functions/references/useMemory.md
467 +.agents/skills/vueuse-functions/references/useMin.md
468 +.agents/skills/vueuse-functions/references/useMounted.md
469 +.agents/skills/vueuse-functions/references/useMouse.md
470 +.agents/skills/vueuse-functions/references/useMouseInElement.md
471 +.agents/skills/vueuse-functions/references/useMousePressed.md
472 +.agents/skills/vueuse-functions/references/useMutationObserver.md
473 +.agents/skills/vueuse-functions/references/useNProgress.md
474 +.agents/skills/vueuse-functions/references/useNavigatorLanguage.md
475 +.agents/skills/vueuse-functions/references/useNetwork.md
476 +.agents/skills/vueuse-functions/references/useNow.md
477 +.agents/skills/vueuse-functions/references/useObjectUrl.md
478 +.agents/skills/vueuse-functions/references/useObservable.md
479 +.agents/skills/vueuse-functions/references/useOffsetPagination.md
480 +.agents/skills/vueuse-functions/references/useOnline.md
481 +.agents/skills/vueuse-functions/references/usePageLeave.md
482 +.agents/skills/vueuse-functions/references/useParallax.md
483 +.agents/skills/vueuse-functions/references/useParentElement.md
484 +.agents/skills/vueuse-functions/references/usePerformanceObserver.md
485 +.agents/skills/vueuse-functions/references/usePermission.md
486 +.agents/skills/vueuse-functions/references/usePointer.md
487 +.agents/skills/vueuse-functions/references/usePointerLock.md
488 +.agents/skills/vueuse-functions/references/usePointerSwipe.md
489 +.agents/skills/vueuse-functions/references/usePrecision.md
490 +.agents/skills/vueuse-functions/references/usePreferredColorScheme.md
491 +.agents/skills/vueuse-functions/references/usePreferredContrast.md
492 +.agents/skills/vueuse-functions/references/usePreferredDark.md
493 +.agents/skills/vueuse-functions/references/usePreferredLanguages.md
494 +.agents/skills/vueuse-functions/references/usePreferredReducedMotion.md
495 +.agents/skills/vueuse-functions/references/usePreferredReducedTransparency.md
496 +.agents/skills/vueuse-functions/references/usePrevious.md
497 +.agents/skills/vueuse-functions/references/useProjection.md
498 +.agents/skills/vueuse-functions/references/useQRCode.md
499 +.agents/skills/vueuse-functions/references/useRTDB.md
500 +.agents/skills/vueuse-functions/references/useRafFn.md
501 +.agents/skills/vueuse-functions/references/useRefHistory.md
502 +.agents/skills/vueuse-functions/references/useResizeObserver.md
503 +.agents/skills/vueuse-functions/references/useRound.md
504 +.agents/skills/vueuse-functions/references/useRouteHash.md
505 +.agents/skills/vueuse-functions/references/useRouteParams.md
506 +.agents/skills/vueuse-functions/references/useRouteQuery.md
507 +.agents/skills/vueuse-functions/references/useSSRWidth.md
508 +.agents/skills/vueuse-functions/references/useScreenOrientation.md
509 +.agents/skills/vueuse-functions/references/useScreenSafeArea.md
510 +.agents/skills/vueuse-functions/references/useScriptTag.md
511 +.agents/skills/vueuse-functions/references/useScroll.md
512 +.agents/skills/vueuse-functions/references/useScrollLock.md
513 +.agents/skills/vueuse-functions/references/useSessionStorage.md
514 +.agents/skills/vueuse-functions/references/useShare.md
515 +.agents/skills/vueuse-functions/references/useSortable.md
516 +.agents/skills/vueuse-functions/references/useSorted.md
517 +.agents/skills/vueuse-functions/references/useSpeechRecognition.md
518 +.agents/skills/vueuse-functions/references/useSpeechSynthesis.md
519 +.agents/skills/vueuse-functions/references/useStepper.md
520 +.agents/skills/vueuse-functions/references/useStorage.md
521 +.agents/skills/vueuse-functions/references/useStorageAsync.md
522 +.agents/skills/vueuse-functions/references/useStyleTag.md
523 +.agents/skills/vueuse-functions/references/useSubject.md
524 +.agents/skills/vueuse-functions/references/useSubscription.md
525 +.agents/skills/vueuse-functions/references/useSum.md
526 +.agents/skills/vueuse-functions/references/useSupported.md
527 +.agents/skills/vueuse-functions/references/useSwipe.md
528 +.agents/skills/vueuse-functions/references/useTemplateRefsList.md
529 +.agents/skills/vueuse-functions/references/useTextDirection.md
530 +.agents/skills/vueuse-functions/references/useTextSelection.md
531 +.agents/skills/vueuse-functions/references/useTextareaAutosize.md
532 +.agents/skills/vueuse-functions/references/useThrottleFn.md
533 +.agents/skills/vueuse-functions/references/useThrottledRefHistory.md
534 +.agents/skills/vueuse-functions/references/useTimeAgo.md
535 +.agents/skills/vueuse-functions/references/useTimeAgoIntl.md
536 +.agents/skills/vueuse-functions/references/useTimeout.md
537 +.agents/skills/vueuse-functions/references/useTimeoutFn.md
538 +.agents/skills/vueuse-functions/references/useTimeoutPoll.md
539 +.agents/skills/vueuse-functions/references/useTimestamp.md
540 +.agents/skills/vueuse-functions/references/useTitle.md
541 +.agents/skills/vueuse-functions/references/useToNumber.md
542 +.agents/skills/vueuse-functions/references/useToString.md
543 +.agents/skills/vueuse-functions/references/useToggle.md
544 +.agents/skills/vueuse-functions/references/useTransition.md
545 +.agents/skills/vueuse-functions/references/useTrunc.md
546 +.agents/skills/vueuse-functions/references/useUrlSearchParams.md
547 +.agents/skills/vueuse-functions/references/useUserMedia.md
548 +.agents/skills/vueuse-functions/references/useVModel.md
549 +.agents/skills/vueuse-functions/references/useVModels.md
550 +.agents/skills/vueuse-functions/references/useVibrate.md
551 +.agents/skills/vueuse-functions/references/useVirtualList.md
552 +.agents/skills/vueuse-functions/references/useWakeLock.md
553 +.agents/skills/vueuse-functions/references/useWebNotification.md
554 +.agents/skills/vueuse-functions/references/useWebSocket.md
555 +.agents/skills/vueuse-functions/references/useWebWorker.md
556 +.agents/skills/vueuse-functions/references/useWebWorkerFn.md
557 +.agents/skills/vueuse-functions/references/useWindowFocus.md
558 +.agents/skills/vueuse-functions/references/useWindowScroll.md
559 +.agents/skills/vueuse-functions/references/useWindowSize.md
560 +.agents/skills/vueuse-functions/references/useZoomFactor.md
561 +.agents/skills/vueuse-functions/references/useZoomLevel.md
562 +.agents/skills/vueuse-functions/references/watchArray.md
563 +.agents/skills/vueuse-functions/references/watchAtMost.md
564 +.agents/skills/vueuse-functions/references/watchDebounced.md
565 +.agents/skills/vueuse-functions/references/watchDeep.md
566 +.agents/skills/vueuse-functions/references/watchExtractedObservable.md
567 +.agents/skills/vueuse-functions/references/watchIgnorable.md
568 +.agents/skills/vueuse-functions/references/watchImmediate.md
569 +.agents/skills/vueuse-functions/references/watchOnce.md
570 +.agents/skills/vueuse-functions/references/watchPausable.md
571 +.agents/skills/vueuse-functions/references/watchThrottled.md
572 +.agents/skills/vueuse-functions/references/watchTriggerable.md
573 +.agents/skills/vueuse-functions/references/watchWithFilter.md
574 +.agents/skills/vueuse-functions/references/whenever.md
575 +.agents/skills/web-design-guidelines/SKILL.md
576 +.agents/skills/web-quality-audit/SKILL.md
577 +.agents/skills/web-quality-audit/scripts/analyze.sh
578 +.cursor/commands/iterate.md
579 +.cursor/commands/parallelize.md
580 +.cursor/rules/agent-workflow.mdc
581 +.cursor/rules/anti-patterns.mdc
582 +.cursor/rules/atomic-commits.mdc
583 +.cursor/rules/avoid-duplication.mdc
584 +.cursor/rules/batch-operations.mdc
585 +.cursor/rules/branch-hygiene.mdc
586 +.cursor/rules/code-quality.mdc
587 +.cursor/rules/commit-messages.mdc
588 +.cursor/rules/communication-style.mdc
589 +.cursor/rules/complexity-limits.mdc
590 +.cursor/rules/container-standards.mdc
591 +.cursor/rules/context-architecture.mdc
592 +.cursor/rules/context-owasp-quick-reference.mdc
593 +.cursor/rules/context-preservation.mdc
594 +.cursor/rules/dead-code.mdc
595 +.cursor/rules/dependency-awareness.mdc
596 +.cursor/rules/design-system.mdc
597 +.cursor/rules/error-handling.mdc
598 +.cursor/rules/explain-reasoning.mdc
599 +.cursor/rules/github-workflow.mdc
600 +.cursor/rules/incremental-approach.mdc
601 +.cursor/rules/inline-documentation.mdc
602 +.cursor/rules/input-validation.mdc
603 +.cursor/rules/least-privilege.mdc
604 +.cursor/rules/meaningful-assertions.mdc
605 +.cursor/rules/minimal-changes.mdc
606 +.cursor/rules/no-ai-signatures.mdc
607 +.cursor/rules/observability-standards.mdc
608 +.cursor/rules/output-awareness.mdc
609 +.cursor/rules/pipeline-standards.mdc
610 +.cursor/rules/read-before-write.mdc
611 +.cursor/rules/readability-first.mdc
612 +.cursor/rules/readme-standards.mdc
613 +.cursor/rules/safe-git-operations.mdc
614 +.cursor/rules/secrets-handling.mdc
615 +.cursor/rules/systematic-debugging.mdc
616 +.cursor/rules/task-runner.mdc
617 +.cursor/rules/tdd-workflow.mdc
618 +.cursor/rules/test-alongside-code.mdc
619 +.cursor/rules/test-independence.mdc
620 +.cursor/rules/test-naming.mdc
621 +.cursor/rules/testing-anti-patterns.mdc
622 +.cursor/rules/typescript-conventions.mdc
623 +.cursor/rules/update-docs-with-code.mdc
624 +.cursor/rules/verification-before-completion.mdc
625 +.cursor/rules/verify-before-acting.mdc
626 +.cursor/rules/vite-plus-conventions.mdc
627 +# END ai-rulez
customer-portal/Dockerfile
+6 -6
@@ -4,8 +4,8 @@
4 # # Install pnpm globally
5 # RUN npm install -g pnpm
6
7 -FROM node:22 as builder
8 -RUN npm install -g pnpm@10.33.2
7 +FROM node:24 as builder
8 +RUN corepack enable && corepack prepare pnpm@11.5.0 --activate
9
10 # Drop root
11 USER node
@@ -13,11 +13,11 @@ USER node
13 # Set the working directory
14 WORKDIR /app
15
16 -# Copy the package.json and pnpm-lock.yaml files into the working directory
17 -COPY package.json pnpm-lock.yaml ./
16 +# `pnpm-workspace.yaml` carries `allowBuilds` (required for @parcel/watcher native install).
17 +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
18
19 # Install project dependencies using pnpm
20 -RUN pnpm install
20 +RUN pnpm install --frozen-lockfile
21
22 # Copy project files into the working directory
23 COPY --chown=node . .
@@ -25,7 +25,7 @@ COPY --chown=node . .
25 # Run the Vue.js project build using pnpm
26 RUN pnpm run build:only
27
28 -FROM node:21 as dev
28 +FROM node:24 as dev
29
30 RUN apt-get update && apt-get install -y openssl
31
customer-portal/eslint.config.mjs
+4
@@ -1,5 +1,8 @@
1 +import process from "node:process"
2 import antfu from "@antfu/eslint-config"
3
4 +const isProduction = process.env.NODE_ENV === "production"
5 +
6 export default antfu(
7 {
8 vue: true,
@@ -14,6 +17,7 @@ export default antfu(
17 rules: {
18 "e18e/ban-dependencies": ["error", { allowed: ["axios", "lodash", "depcheck", "fs-extra"] }],
19 "antfu/if-newline": "off",
20 + "pnpm/yaml-enforce-settings": isProduction ? "error" : "off",
21 "style/operator-linebreak": "off",
22 "style/arrow-parens": "off",
23 "style/brace-style": "off",
customer-portal/package.json
+37 -49
@@ -3,7 +3,7 @@
3 "type": "module",
4 "version": "1.0.0",
5 "private": true,
6 - "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319",
6 + "packageManager": "pnpm@11.5.0+sha512.dbfcc4f81cf48597afd4bc391ffdf12c11f1a9fb83a395bfa6b0a2d9cc2fd8ffebafdb1ccbd529632153f793904c2615b7f09fe1a345473fd1c35845172a8eb1",
7 "engines": {
8 "node": ">=18.0.0"
9 },
@@ -18,7 +18,7 @@
18 "preview": "vite build && echo '' && vite preview --port 4173 --host",
19 "preview:only": "vite preview --port 4173 --host",
20 "dup-check": "jscpd --ignore \"**/node_modules/**,**/dist/**,**/.nuxt/**,**/*.svg\" --min-tokens 100 --reporters console,html,json .",
21 - "type-check": "vue-tsc --build --force",
21 + "type-check": "vue-tsc --build --force tsconfig.app.json",
22 "lint": "eslint . --fix",
23 "format": "prettier --write src/",
24 "lint-type-format": "run-s lint type-check format",
@@ -35,36 +35,37 @@
35 "@fontsource/jetbrains-mono": "^5.2.8",
36 "@fontsource/lexend": "^5.2.11",
37 "@fontsource/public-sans": "^5.2.7",
38 - "@shikijs/markdown-it": "^4.0.2",
39 - "@vueuse/core": "^14.2.1",
38 + "@shikijs/markdown-it": "^4.1.0",
39 + "@vueuse/core": "^14.3.0",
40 "@vueuse/motion": "^3.0.3",
41 - "axios": "^1.15.1",
41 + "axios": "^1.16.1",
42 "bytes": "^3.1.2",
43 "colord": "^2.9.3",
44 - "dayjs": "^1.11.20",
44 + "dayjs": "^1.11.21",
45 "detect-touch-device": "^1.1.6",
46 - "echarts": "^6.0.0",
46 + "echarts": "^6.1.0",
47 "file-saver": "^2.0.5",
48 "html-entities": "^2.6.0",
49 - "jose": "^6.2.2",
49 + "jose": "^6.2.3",
50 "js-md5": "^0.8.3",
51 "lodash": "^4.18.1",
52 "mitt": "^3.0.1",
53 "naive-ui": "^2.44.1",
54 - "nanoid": "^5.1.9",
54 + "nanoid": "^5.1.11",
55 "password-validator": "^5.3.0",
56 "pinia": "^3.0.4",
57 "pinia-plugin-persistedstate": "^4.7.1",
58 + "rolldown": "1.0.1",
59 "secure-ls": "^2.0.0",
59 - "shiki": "^4.0.2",
60 + "shiki": "^4.1.0",
61 "thememirror": "^2.0.1",
62 "validator": "^13.15.35",
62 - "vue": "^3.5.32",
63 + "vue": "^3.5.35",
64 "vue-advanced-cropper": "^2.8.9",
65 + "vue-echarts": "^8.0.1",
66 "vue-highlight-words": "^3.0.1",
65 - "vue-i18n": "^11.3.2",
66 - "vue-router": "^5.0.4",
67 - "vue3-apexcharts": "^1.11.1",
67 + "vue-i18n": "^11.4.4",
68 + "vue-router": "^5.1.0",
69 "vue3-marquee": "^4.2.2",
70 "vuedraggable": "^4.1.0"
71 },
@@ -74,54 +75,41 @@
75 "vueuc": "^0.4.64"
76 },
77 "devDependencies": {
77 - "@antfu/eslint-config": "~8.2.0",
78 - "@clack/prompts": "^1.2.0",
79 - "@iconify/vue": "^5.0.0",
80 - "@tailwindcss/vite": "^4.2.2",
78 + "@antfu/eslint-config": "~9.0.0",
79 + "@clack/prompts": "^1.5.0",
80 + "@iconify/vue": "^5.0.1",
81 + "@tailwindcss/vite": "^4.3.0",
82 "@tsconfig/node20": "^20.1.9",
83 "@types/bytes": "^3.1.5",
84 "@types/file-saver": "^2.0.7",
85 "@types/fs-extra": "^11.0.4",
85 - "@types/jsdom": "^28.0.1",
86 + "@types/jsdom": "^28.0.3",
87 "@types/lodash": "^4.17.24",
88 "@types/markdown-it": "^14.1.2",
88 - "@types/node": "^25.6.0",
89 + "@types/node": "^25.9.1",
90 "@types/validator": "^13.15.10",
90 - "@vitejs/plugin-vue": "^6.0.6",
91 + "@vitejs/plugin-vue": "^6.0.7",
92 "@vitejs/plugin-vue-jsx": "^5.1.5",
93 "@vue/tsconfig": "~0.9.1",
94 "depcheck": "^1.4.7",
94 - "eslint": "~10.2.1",
95 + "eslint": "~10.4.1",
96 "flourite": "^1.3.0",
96 - "fs-extra": "^11.3.4",
97 - "jscpd": "^4.0.9",
98 - "jsdom": "^29.0.2",
99 - "npm-run-all2": "^8.0.4",
97 + "fs-extra": "^11.3.5",
98 + "jscpd": "^4.2.4",
99 + "jsdom": "^29.1.1",
100 + "npm-run-all2": "^9.0.1",
101 "prettier": "^3.8.3",
101 - "prettier-plugin-tailwindcss": "^0.7.2",
102 - "sass": "^1.99.0",
103 - "tailwindcss": "^4.2.2",
104 - "taze": "^19.11.0",
105 - "type-fest": "^5.6.0",
106 - "typescript": "~5.9.3",
107 - "vite": "^7.3.1",
102 + "prettier-plugin-tailwindcss": "^0.8.0",
103 + "sass": "^1.100.0",
104 + "tailwindcss": "^4.3.0",
105 + "taze": "^19.14.1",
106 + "type-fest": "^5.7.0",
107 + "typescript": "~6.0.3",
108 + "vite": "^8.0.16",
109 "vite-bundle-visualizer": "^1.2.1",
109 - "vite-plugin-inspect": "^11.3.3",
110 - "vite-plugin-vue-devtools": "^8.1.1",
110 + "vite-plugin-inspect": "^11.4.1",
111 + "vite-plugin-vue-devtools": "^8.1.2",
112 "vite-svg-loader": "^5.1.1",
112 - "vue-tsc": "^3.2.7"
113 - },
114 - "pnpm": {
115 - "peerDependencyRules": {
116 - "allowedVersions": {
117 - "eslint": "10"
118 - }
119 - },
120 - "onlyBuiltDependencies": [
121 - "@parcel/watcher",
122 - "@tailwindcss/oxide",
123 - "esbuild",
124 - "unrs-resolver"
125 - ]
113 + "vue-tsc": "^3.3.3"
114 }
115 }
\ No newline at end of file
customer-portal/pnpm-lock.yaml
+1668 -1888
@@ -4,13 +4,16 @@ settings:
4 autoInstallPeers: true
5 excludeLinksFromLockfile: false
6
7 +overrides:
8 + rolldown: 1.0.1
9 +
10 importers:
11
12 .:
13 dependencies:
14 '@f3ve/vue-markdown-it':
15 specifier: ^0.2.3
13 - version: 0.2.3(vue@3.5.32(typescript@5.9.3))
16 + version: 0.2.3(vue@3.5.35(typescript@6.0.3))
17 '@fontsource/jetbrains-mono':
18 specifier: ^5.2.8
19 version: 5.2.8
@@ -21,17 +24,17 @@ importers:
24 specifier: ^5.2.7
25 version: 5.2.7
26 '@shikijs/markdown-it':
24 - specifier: ^4.0.2
25 - version: 4.0.2
27 + specifier: ^4.1.0
28 + version: 4.1.0
29 '@vueuse/core':
27 - specifier: ^14.2.1
28 - version: 14.2.1(vue@3.5.32(typescript@5.9.3))
30 + specifier: ^14.3.0
31 + version: 14.3.0(vue@3.5.35(typescript@6.0.3))
32 '@vueuse/motion':
33 specifier: ^3.0.3
31 - version: 3.0.3(vue@3.5.32(typescript@5.9.3))
34 + version: 3.0.3(vue@3.5.35(typescript@6.0.3))
35 axios:
33 - specifier: ^1.15.1
34 - version: 1.15.1
36 + specifier: ^1.16.1
37 + version: 1.16.1
38 bytes:
39 specifier: ^3.1.2
40 version: 3.1.2
@@ -39,14 +42,14 @@ importers:
42 specifier: ^2.9.3
43 version: 2.9.3
44 dayjs:
42 - specifier: ^1.11.20
43 - version: 1.11.20
45 + specifier: ^1.11.21
46 + version: 1.11.21
47 detect-touch-device:
48 specifier: ^1.1.6
49 version: 1.1.6
50 echarts:
48 - specifier: ^6.0.0
49 - version: 6.0.0
51 + specifier: ^6.1.0
52 + version: 6.1.0
53 file-saver:
54 specifier: ^2.0.5
55 version: 2.0.5
@@ -54,8 +57,8 @@ importers:
57 specifier: ^2.6.0
58 version: 2.6.0
59 jose:
57 - specifier: ^6.2.2
58 - version: 6.2.2
60 + specifier: ^6.2.3
61 + version: 6.2.3
62 js-md5:
63 specifier: ^0.8.3
64 version: 0.8.3
@@ -67,68 +70,71 @@ importers:
70 version: 3.0.1
71 naive-ui:
72 specifier: ^2.44.1
70 - version: 2.44.1(vue@3.5.32(typescript@5.9.3))
73 + version: 2.44.1(vue@3.5.35(typescript@6.0.3))
74 nanoid:
72 - specifier: ^5.1.9
73 - version: 5.1.9
75 + specifier: ^5.1.11
76 + version: 5.1.11
77 password-validator:
78 specifier: ^5.3.0
79 version: 5.3.0
80 pinia:
81 specifier: ^3.0.4
79 - version: 3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))
82 + version: 3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
83 pinia-plugin-persistedstate:
84 specifier: ^4.7.1
82 - version: 4.7.1(@nuxt/kit@3.21.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))
85 + version: 4.7.1(@nuxt/kit@3.21.6)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))
86 + rolldown:
87 + specifier: 1.0.1
88 + version: 1.0.1
89 secure-ls:
90 specifier: ^2.0.0
91 version: 2.0.0
92 shiki:
87 - specifier: ^4.0.2
88 - version: 4.0.2
93 + specifier: ^4.1.0
94 + version: 4.1.0
95 thememirror:
96 specifier: ^2.0.1
91 - version: 2.0.1(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)
97 + version: 2.0.1(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0)
98 validator:
99 specifier: ^13.15.35
100 version: 13.15.35
101 vue:
96 - specifier: ^3.5.32
97 - version: 3.5.32(typescript@5.9.3)
102 + specifier: ^3.5.35
103 + version: 3.5.35(typescript@6.0.3)
104 vue-advanced-cropper:
105 specifier: ^2.8.9
100 - version: 2.8.9(vue@3.5.32(typescript@5.9.3))
106 + version: 2.8.9(vue@3.5.35(typescript@6.0.3))
107 + vue-echarts:
108 + specifier: ^8.0.1
109 + version: 8.0.1(echarts@6.1.0)(vue@3.5.35(typescript@6.0.3))
110 vue-highlight-words:
111 specifier: ^3.0.1
103 - version: 3.0.1(vue@3.5.32(typescript@5.9.3))
112 + version: 3.0.1(vue@3.5.35(typescript@6.0.3))
113 vue-i18n:
105 - specifier: ^11.3.2
106 - version: 11.3.2(vue@3.5.32(typescript@5.9.3))
114 + specifier: ^11.4.4
115 + version: 11.4.4(vue@3.5.35(typescript@6.0.3))
116 vue-router:
108 - specifier: ^5.0.4
109 - version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
110 - vue3-apexcharts:
111 - specifier: ^1.11.1
112 - version: 1.11.1(apexcharts@5.10.6)(vue@3.5.32(typescript@5.9.3))
117 + specifier: ^5.1.0
118 + version: 5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
119 vue3-marquee:
120 specifier: ^4.2.2
115 - version: 4.2.2(vue@3.5.32(typescript@5.9.3))
121 + version: 4.2.2(vue@3.5.35(typescript@6.0.3))
122 vuedraggable:
123 specifier: ^4.1.0
118 - version: 4.1.0(vue@3.5.32(typescript@5.9.3))
124 + version: 4.1.0(vue@3.5.35(typescript@6.0.3))
125 devDependencies:
126 '@antfu/eslint-config':
121 - specifier: ~8.2.0
122 - version: 8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
127 + specifier: ~9.0.0
128 + version: 9.0.0(@typescript-eslint/rule-tester@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3))(@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
129 '@clack/prompts':
124 - specifier: ^1.2.0
125 - version: 1.2.0
130 + specifier: ^1.5.0
131 + version: 1.5.0
132 '@iconify/vue':
127 - specifier: ^5.0.0
128 - version: 5.0.0(vue@3.5.32(typescript@5.9.3))
133 + specifier: ^5.0.1
134 + version: 5.0.1(vue@3.5.35(typescript@6.0.3))
135 '@tailwindcss/vite':
130 - specifier: ^4.2.2
131 - version: 4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
136 + specifier: ^4.3.0
137 + version: 4.3.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
138 '@tsconfig/node20':
139 specifier: ^20.1.9
140 version: 20.1.9
@@ -142,8 +148,8 @@ importers:
148 specifier: ^11.0.4
149 version: 11.0.4
150 '@types/jsdom':
145 - specifier: ^28.0.1
146 - version: 28.0.1
151 + specifier: ^28.0.3
152 + version: 28.0.3
153 '@types/lodash':
154 specifier: ^4.17.24
155 version: 4.17.24
@@ -151,101 +157,101 @@ importers:
157 specifier: ^14.1.2
158 version: 14.1.2
159 '@types/node':
154 - specifier: ^25.6.0
155 - version: 25.6.0
160 + specifier: ^25.9.1
161 + version: 25.9.1
162 '@types/validator':
163 specifier: ^13.15.10
164 version: 13.15.10
165 '@vitejs/plugin-vue':
160 - specifier: ^6.0.6
161 - version: 6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
166 + specifier: ^6.0.7
167 + version: 6.0.7(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
168 '@vitejs/plugin-vue-jsx':
169 specifier: ^5.1.5
164 - version: 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
170 + version: 5.1.5(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
171 '@vue/tsconfig':
172 specifier: ~0.9.1
167 - version: 0.9.1(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))
173 + version: 0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
174 depcheck:
175 specifier: ^1.4.7
176 version: 1.4.7
177 eslint:
172 - specifier: ~10.2.1
173 - version: 10.2.1(jiti@2.6.1)
178 + specifier: ~10.4.1
179 + version: 10.4.1(jiti@2.7.0)
180 flourite:
181 specifier: ^1.3.0
182 version: 1.3.0
183 fs-extra:
178 - specifier: ^11.3.4
179 - version: 11.3.4
184 + specifier: ^11.3.5
185 + version: 11.3.5
186 jscpd:
181 - specifier: ^4.0.9
182 - version: 4.0.9
187 + specifier: ^4.2.4
188 + version: 4.2.4
189 jsdom:
184 - specifier: ^29.0.2
185 - version: 29.0.2
190 + specifier: ^29.1.1
191 + version: 29.1.1
192 npm-run-all2:
187 - specifier: ^8.0.4
188 - version: 8.0.4
193 + specifier: ^9.0.1
194 + version: 9.0.1
195 prettier:
196 specifier: ^3.8.3
197 version: 3.8.3
198 prettier-plugin-tailwindcss:
193 - specifier: ^0.7.2
194 - version: 0.7.2(prettier@3.8.3)
199 + specifier: ^0.8.0
200 + version: 0.8.0(prettier@3.8.3)
201 sass:
196 - specifier: ^1.99.0
197 - version: 1.99.0
202 + specifier: ^1.100.0
203 + version: 1.100.0
204 tailwindcss:
199 - specifier: ^4.2.2
200 - version: 4.2.2
205 + specifier: ^4.3.0
206 + version: 4.3.0
207 taze:
202 - specifier: ^19.11.0
203 - version: 19.11.0
208 + specifier: ^19.14.1
209 + version: 19.14.1
210 type-fest:
205 - specifier: ^5.6.0
206 - version: 5.6.0
211 + specifier: ^5.7.0
212 + version: 5.7.0
213 typescript:
208 - specifier: ~5.9.3
209 - version: 5.9.3
214 + specifier: ~6.0.3
215 + version: 6.0.3
216 vite:
211 - specifier: ^7.3.1
212 - version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
217 + specifier: ^8.0.16
218 + version: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
219 vite-bundle-visualizer:
220 specifier: ^1.2.1
215 - version: 1.2.1(rollup@4.60.2)
221 + version: 1.2.1(rolldown@1.0.1)
222 vite-plugin-inspect:
217 - specifier: ^11.3.3
218 - version: 11.3.3(@nuxt/kit@3.21.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
223 + specifier: ^11.4.1
224 + version: 11.4.1(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
225 vite-plugin-vue-devtools:
220 - specifier: ^8.1.1
221 - version: 8.1.1(@nuxt/kit@3.21.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
226 + specifier: ^8.1.2
227 + version: 8.1.2(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
228 vite-svg-loader:
229 specifier: ^5.1.1
224 - version: 5.1.1(vue@3.5.32(typescript@5.9.3))
230 + version: 5.1.1(vue@3.5.35(typescript@6.0.3))
231 vue-tsc:
226 - specifier: ^3.2.7
227 - version: 3.2.7(typescript@5.9.3)
232 + specifier: ^3.3.3
233 + version: 3.3.3(typescript@6.0.3)
234 optionalDependencies:
235 '@rollup/rollup-linux-x64-gnu':
236 specifier: ^4.46.2
231 - version: 4.60.2
237 + version: 4.61.0
238 treemate:
239 specifier: ^0.3.11
240 version: 0.3.11
241 vueuc:
242 specifier: ^0.4.64
237 - version: 0.4.65(vue@3.5.32(typescript@5.9.3))
243 + version: 0.4.65(vue@3.5.35(typescript@6.0.3))
244
245 packages:
246
241 - '@antfu/eslint-config@8.2.0':
242 - resolution: {integrity: sha512-spfwYXMNrlkl69riTSBnbC0C2K8EVfVMOK3ceP2EpAAioyfprIW1gTwyLRtd9jZSFeNdX4mFNAIG+o0sOneOfA==}
247 + '@antfu/eslint-config@9.0.0':
248 + resolution: {integrity: sha512-8aQW0UWHoNMdVxTfzs1+w10t26plsc9oFs8YhCyCtST5nnANJe/VAjqvR3hYI1l3PHBeo4tjVMg8wuu6g3OLlA==}
249 hasBin: true
250 peerDependencies:
251 '@angular-eslint/eslint-plugin': ^21.1.0
252 '@angular-eslint/eslint-plugin-template': ^21.1.0
253 '@angular-eslint/template-parser': ^21.1.0
248 - '@eslint-react/eslint-plugin': ^3.0.0
254 + '@eslint-react/eslint-plugin': ^5.6.0
255 '@next/eslint-plugin-next': '>=15.0.0'
256 '@prettier/plugin-xml': ^3.4.1
257 '@unocss/eslint-plugin': '>=0.50.0'
@@ -302,8 +308,8 @@ packages:
308 '@antfu/install-pkg@1.1.0':
309 resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
310
305 - '@antfu/ni@30.0.0':
306 - resolution: {integrity: sha512-DqBVB3XqXH4VsDpER7iLlEtayMC98iXrY7kwBzp1v6LGc/6U6+qnN3+X0bcPK63LMXJCRG2D/XDq7dvtKDGogg==}
311 + '@antfu/ni@30.1.0':
312 + resolution: {integrity: sha512-3VuAbPjgY52rQNn4wABaXMhBU2Oq91uy6L8nX49eJ35OLI68CyckGU+HZxcaHix4ymuGM2nFL1D6sLpgODK5xw==}
313 engines: {node: '>=20.19.0'}
314 hasBin: true
315
@@ -322,107 +328,124 @@ packages:
328 '@asamuzakjp/nwsapi@2.3.9':
329 resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
330
325 - '@babel/code-frame@7.29.0':
326 - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
331 + '@babel/code-frame@7.29.7':
332 + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
333 engines: {node: '>=6.9.0'}
334
329 - '@babel/compat-data@7.29.0':
330 - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
335 + '@babel/compat-data@7.29.7':
336 + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
337 engines: {node: '>=6.9.0'}
338
333 - '@babel/core@7.29.0':
334 - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
339 + '@babel/core@7.29.7':
340 + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
341 engines: {node: '>=6.9.0'}
342
337 - '@babel/generator@7.29.1':
338 - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
343 + '@babel/generator@7.29.7':
344 + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
345 engines: {node: '>=6.9.0'}
346
341 - '@babel/helper-annotate-as-pure@7.27.3':
342 - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
347 + '@babel/generator@8.0.0-rc.6':
348 + resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==}
349 + engines: {node: ^22.18.0 || >=24.11.0}
350 +
351 + '@babel/helper-annotate-as-pure@7.29.7':
352 + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==}
353 engines: {node: '>=6.9.0'}
354
345 - '@babel/helper-compilation-targets@7.28.6':
346 - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
355 + '@babel/helper-compilation-targets@7.29.7':
356 + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
357 engines: {node: '>=6.9.0'}
358
349 - '@babel/helper-create-class-features-plugin@7.28.6':
350 - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==}
359 + '@babel/helper-create-class-features-plugin@7.29.7':
360 + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==}
361 engines: {node: '>=6.9.0'}
362 peerDependencies:
363 '@babel/core': ^7.0.0
364
355 - '@babel/helper-globals@7.28.0':
356 - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
365 + '@babel/helper-globals@7.29.7':
366 + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
367 engines: {node: '>=6.9.0'}
368
359 - '@babel/helper-member-expression-to-functions@7.28.5':
360 - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
369 + '@babel/helper-member-expression-to-functions@7.29.7':
370 + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==}
371 engines: {node: '>=6.9.0'}
372
363 - '@babel/helper-module-imports@7.28.6':
364 - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
373 + '@babel/helper-module-imports@7.29.7':
374 + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
375 engines: {node: '>=6.9.0'}
376
367 - '@babel/helper-module-transforms@7.28.6':
368 - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
377 + '@babel/helper-module-transforms@7.29.7':
378 + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
379 engines: {node: '>=6.9.0'}
380 peerDependencies:
381 '@babel/core': ^7.0.0
382
373 - '@babel/helper-optimise-call-expression@7.27.1':
374 - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
383 + '@babel/helper-optimise-call-expression@7.29.7':
384 + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==}
385 engines: {node: '>=6.9.0'}
386
377 - '@babel/helper-plugin-utils@7.28.6':
378 - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
387 + '@babel/helper-plugin-utils@7.29.7':
388 + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==}
389 engines: {node: '>=6.9.0'}
390
381 - '@babel/helper-replace-supers@7.28.6':
382 - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
391 + '@babel/helper-replace-supers@7.29.7':
392 + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==}
393 engines: {node: '>=6.9.0'}
394 peerDependencies:
395 '@babel/core': ^7.0.0
396
387 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
388 - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
397 + '@babel/helper-skip-transparent-expression-wrappers@7.29.7':
398 + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==}
399 engines: {node: '>=6.9.0'}
400
391 - '@babel/helper-string-parser@7.27.1':
392 - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
401 + '@babel/helper-string-parser@7.29.7':
402 + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
403 engines: {node: '>=6.9.0'}
404
395 - '@babel/helper-validator-identifier@7.28.5':
396 - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
405 + '@babel/helper-string-parser@8.0.0-rc.6':
406 + resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==}
407 + engines: {node: ^22.18.0 || >=24.11.0}
408 +
409 + '@babel/helper-validator-identifier@7.29.7':
410 + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
411 engines: {node: '>=6.9.0'}
412
399 - '@babel/helper-validator-option@7.27.1':
400 - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
413 + '@babel/helper-validator-identifier@8.0.0-rc.6':
414 + resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==}
415 + engines: {node: ^22.18.0 || >=24.11.0}
416 +
417 + '@babel/helper-validator-option@7.29.7':
418 + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
419 engines: {node: '>=6.9.0'}
420
403 - '@babel/helpers@7.29.2':
404 - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
421 + '@babel/helpers@7.29.7':
422 + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
423 engines: {node: '>=6.9.0'}
424
407 - '@babel/parser@7.29.2':
408 - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
425 + '@babel/parser@7.29.7':
426 + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
427 engines: {node: '>=6.0.0'}
428 hasBin: true
429
412 - '@babel/plugin-proposal-decorators@7.29.0':
413 - resolution: {integrity: sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==}
430 + '@babel/parser@8.0.0-rc.6':
431 + resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==}
432 + engines: {node: ^22.18.0 || >=24.11.0}
433 + hasBin: true
434 +
435 + '@babel/plugin-proposal-decorators@7.29.7':
436 + resolution: {integrity: sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==}
437 engines: {node: '>=6.9.0'}
438 peerDependencies:
439 '@babel/core': ^7.0.0-0
440
418 - '@babel/plugin-syntax-decorators@7.28.6':
419 - resolution: {integrity: sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==}
441 + '@babel/plugin-syntax-decorators@7.29.7':
442 + resolution: {integrity: sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==}
443 engines: {node: '>=6.9.0'}
444 peerDependencies:
445 '@babel/core': ^7.0.0-0
446
424 - '@babel/plugin-syntax-import-attributes@7.28.6':
425 - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
447 + '@babel/plugin-syntax-import-attributes@7.29.7':
448 + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==}
449 engines: {node: '>=6.9.0'}
450 peerDependencies:
451 '@babel/core': ^7.0.0-0
@@ -432,45 +455,51 @@ packages:
455 peerDependencies:
456 '@babel/core': ^7.0.0-0
457
435 - '@babel/plugin-syntax-jsx@7.28.6':
436 - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
458 + '@babel/plugin-syntax-jsx@7.29.7':
459 + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==}
460 engines: {node: '>=6.9.0'}
461 peerDependencies:
462 '@babel/core': ^7.0.0-0
463
441 - '@babel/plugin-syntax-typescript@7.28.6':
442 - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
464 + '@babel/plugin-syntax-typescript@7.29.7':
465 + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==}
466 engines: {node: '>=6.9.0'}
467 peerDependencies:
468 '@babel/core': ^7.0.0-0
469
447 - '@babel/plugin-transform-typescript@7.28.6':
448 - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==}
470 + '@babel/plugin-transform-typescript@7.29.7':
471 + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==}
472 engines: {node: '>=6.9.0'}
473 peerDependencies:
474 '@babel/core': ^7.0.0-0
475
453 - '@babel/template@7.28.6':
454 - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
476 + '@babel/template@7.29.7':
477 + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
478 engines: {node: '>=6.9.0'}
479
457 - '@babel/traverse@7.29.0':
458 - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
480 + '@babel/traverse@7.29.7':
481 + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
482 engines: {node: '>=6.9.0'}
483
461 - '@babel/types@7.29.0':
462 - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
484 + '@babel/types@7.29.7':
485 + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
486 engines: {node: '>=6.9.0'}
487
488 + '@babel/types@8.0.0-rc.6':
489 + resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==}
490 + engines: {node: ^22.18.0 || >=24.11.0}
491 +
492 '@bramus/specificity@2.4.2':
493 resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
494 hasBin: true
495
469 - '@clack/core@1.2.0':
470 - resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==}
496 + '@clack/core@1.4.0':
497 + resolution: {integrity: sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw==}
498 + engines: {node: '>= 20.12.0'}
499
472 - '@clack/prompts@1.2.0':
473 - resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==}
500 + '@clack/prompts@1.5.0':
501 + resolution: {integrity: sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA==}
502 + engines: {node: '>= 20.12.0'}
503
504 '@codemirror/language@6.12.3':
505 resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==}
@@ -478,8 +507,8 @@ packages:
507 '@codemirror/state@6.6.0':
508 resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==}
509
481 - '@codemirror/view@6.41.1':
482 - resolution: {integrity: sha512-ToDnWKbBnke+ZLrP6vgTTDScGi5H37YYuZGniQaBzxMVdtCxMrslsmtnOvbPZk4RX9bvkQqnWR/WS/35tJA0qg==}
510 + '@codemirror/view@6.43.0':
511 + resolution: {integrity: sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==}
512
513 '@colors/colors@1.5.0':
514 resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
@@ -499,15 +528,15 @@ packages:
528 resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==}
529 engines: {node: '>=20.19.0'}
530
502 - '@csstools/css-calc@3.2.0':
503 - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==}
531 + '@csstools/css-calc@3.2.1':
532 + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==}
533 engines: {node: '>=20.19.0'}
534 peerDependencies:
535 '@csstools/css-parser-algorithms': ^4.0.0
536 '@csstools/css-tokenizer': ^4.0.0
537
509 - '@csstools/css-color-parser@4.1.0':
510 - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==}
538 + '@csstools/css-color-parser@4.1.1':
539 + resolution: {integrity: sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==}
540 engines: {node: '>=20.19.0'}
541 peerDependencies:
542 '@csstools/css-parser-algorithms': ^4.0.0
@@ -519,8 +548,8 @@ packages:
548 peerDependencies:
549 '@csstools/css-tokenizer': ^4.0.0
550
522 - '@csstools/css-syntax-patches-for-csstree@1.1.3':
523 - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==}
551 + '@csstools/css-syntax-patches-for-csstree@1.1.4':
552 + resolution: {integrity: sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==}
553 peerDependencies:
554 css-tree: ^3.2.1
555 peerDependenciesMeta:
@@ -531,17 +560,26 @@ packages:
560 resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
561 engines: {node: '>=20.19.0'}
562
534 - '@e18e/eslint-plugin@0.3.0':
535 - resolution: {integrity: sha512-hHgfpxsrZ2UYHcicA+tGZnmk19uJTaye9VH79O+XS8R4ona2Hx3xjhXghclNW58uXMk3xXlbYEOMr8thsoBmWg==}
563 + '@e18e/eslint-plugin@0.4.1':
564 + resolution: {integrity: sha512-Re00N8ad1HsNrzpuIX7Bhdr8RSaFWp6VgwJUEJF+47+D1CMcXoS7VNRkIG23e46pddhgxWU0cWk4wYiQIuMHqQ==}
565 peerDependencies:
566 eslint: ^9.0.0 || ^10.0.0
538 - oxlint: ^1.55.0
567 + oxlint: ^1.61.0
568 peerDependenciesMeta:
569 eslint:
570 optional: true
571 oxlint:
572 optional: true
573
574 + '@emnapi/core@1.10.0':
575 + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
576 +
577 + '@emnapi/runtime@1.10.0':
578 + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
579 +
580 + '@emnapi/wasi-threads@1.2.1':
581 + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
582 +
583 '@emotion/hash@0.8.0':
584 resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
585
@@ -557,164 +595,8 @@ packages:
595 resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
596 engines: {node: '>=10'}
597
560 - '@esbuild/aix-ppc64@0.27.7':
561 - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
562 - engines: {node: '>=18'}
563 - cpu: [ppc64]
564 - os: [aix]
565 -
566 - '@esbuild/android-arm64@0.27.7':
567 - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
568 - engines: {node: '>=18'}
569 - cpu: [arm64]
570 - os: [android]
571 -
572 - '@esbuild/android-arm@0.27.7':
573 - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
574 - engines: {node: '>=18'}
575 - cpu: [arm]
576 - os: [android]
577 -
578 - '@esbuild/android-x64@0.27.7':
579 - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
580 - engines: {node: '>=18'}
581 - cpu: [x64]
582 - os: [android]
583 -
584 - '@esbuild/darwin-arm64@0.27.7':
585 - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
586 - engines: {node: '>=18'}
587 - cpu: [arm64]
588 - os: [darwin]
589 -
590 - '@esbuild/darwin-x64@0.27.7':
591 - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
592 - engines: {node: '>=18'}
593 - cpu: [x64]
594 - os: [darwin]
595 -
596 - '@esbuild/freebsd-arm64@0.27.7':
597 - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
598 - engines: {node: '>=18'}
599 - cpu: [arm64]
600 - os: [freebsd]
601 -
602 - '@esbuild/freebsd-x64@0.27.7':
603 - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
604 - engines: {node: '>=18'}
605 - cpu: [x64]
606 - os: [freebsd]
607 -
608 - '@esbuild/linux-arm64@0.27.7':
609 - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
610 - engines: {node: '>=18'}
611 - cpu: [arm64]
612 - os: [linux]
613 -
614 - '@esbuild/linux-arm@0.27.7':
615 - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
616 - engines: {node: '>=18'}
617 - cpu: [arm]
618 - os: [linux]
619 -
620 - '@esbuild/linux-ia32@0.27.7':
621 - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
622 - engines: {node: '>=18'}
623 - cpu: [ia32]
624 - os: [linux]
625 -
626 - '@esbuild/linux-loong64@0.27.7':
627 - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
628 - engines: {node: '>=18'}
629 - cpu: [loong64]
630 - os: [linux]
631 -
632 - '@esbuild/linux-mips64el@0.27.7':
633 - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
634 - engines: {node: '>=18'}
635 - cpu: [mips64el]
636 - os: [linux]
637 -
638 - '@esbuild/linux-ppc64@0.27.7':
639 - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
640 - engines: {node: '>=18'}
641 - cpu: [ppc64]
642 - os: [linux]
643 -
644 - '@esbuild/linux-riscv64@0.27.7':
645 - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
646 - engines: {node: '>=18'}
647 - cpu: [riscv64]
648 - os: [linux]
649 -
650 - '@esbuild/linux-s390x@0.27.7':
651 - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
652 - engines: {node: '>=18'}
653 - cpu: [s390x]
654 - os: [linux]
655 -
656 - '@esbuild/linux-x64@0.27.7':
657 - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
658 - engines: {node: '>=18'}
659 - cpu: [x64]
660 - os: [linux]
661 -
662 - '@esbuild/netbsd-arm64@0.27.7':
663 - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
664 - engines: {node: '>=18'}
665 - cpu: [arm64]
666 - os: [netbsd]
667 -
668 - '@esbuild/netbsd-x64@0.27.7':
669 - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
670 - engines: {node: '>=18'}
671 - cpu: [x64]
672 - os: [netbsd]
673 -
674 - '@esbuild/openbsd-arm64@0.27.7':
675 - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
676 - engines: {node: '>=18'}
677 - cpu: [arm64]
678 - os: [openbsd]
679 -
680 - '@esbuild/openbsd-x64@0.27.7':
681 - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
682 - engines: {node: '>=18'}
683 - cpu: [x64]
684 - os: [openbsd]
685 -
686 - '@esbuild/openharmony-arm64@0.27.7':
687 - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
688 - engines: {node: '>=18'}
689 - cpu: [arm64]
690 - os: [openharmony]
691 -
692 - '@esbuild/sunos-x64@0.27.7':
693 - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
694 - engines: {node: '>=18'}
695 - cpu: [x64]
696 - os: [sunos]
697 -
698 - '@esbuild/win32-arm64@0.27.7':
699 - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
700 - engines: {node: '>=18'}
701 - cpu: [arm64]
702 - os: [win32]
703 -
704 - '@esbuild/win32-ia32@0.27.7':
705 - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
706 - engines: {node: '>=18'}
707 - cpu: [ia32]
708 - os: [win32]
709 -
710 - '@esbuild/win32-x64@0.27.7':
711 - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
712 - engines: {node: '>=18'}
713 - cpu: [x64]
714 - os: [win32]
715 -
716 - '@eslint-community/eslint-plugin-eslint-comments@4.7.1':
717 - resolution: {integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==}
598 + '@eslint-community/eslint-plugin-eslint-comments@4.7.2':
599 + resolution: {integrity: sha512-LF03qURSwEWm2dz5wtdDCzNk+7Opl0X7q6I3undsaIuNsEiNvRV3BCtqu14Q/6Pzg1tBj44LcxpW2EpSLZStZw==}
600 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
601 peerDependencies:
602 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -729,8 +611,8 @@ packages:
611 resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
612 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
613
732 - '@eslint/compat@2.0.5':
733 - resolution: {integrity: sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==}
614 + '@eslint/compat@2.1.0':
615 + resolution: {integrity: sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==}
616 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
617 peerDependencies:
618 eslint: ^8.40 || 9 || 10
@@ -746,28 +628,28 @@ packages:
628 resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
629 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
630
631 + '@eslint/config-helpers@0.6.0':
632 + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==}
633 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
634 +
635 '@eslint/core@1.2.1':
636 resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
637 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
638
753 - '@eslint/markdown@8.0.1':
754 - resolution: {integrity: sha512-WWKmld/EyNdEB8GMq7JMPX1SDWgyJAM1uhtCi5ySrqYQM4HQjmg11EX/q3ZpnpRXHfdccFtli3NBvvGaYjWyQw==}
639 + '@eslint/markdown@8.0.2':
640 + resolution: {integrity: sha512-W+/0qHp0WbvFEljUvvECNpSWrUHpBWIWwp7F3QqEwQKmaRCmfEWvk6VfUia9pTQ0th6HyBGBsPfg/kG3/aQxLA==}
641 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
642
643 '@eslint/object-schema@3.0.5':
644 resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
645 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
646
761 - '@eslint/plugin-kit@0.6.1':
762 - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
647 + '@eslint/plugin-kit@0.7.2':
648 + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
649 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
650
765 - '@eslint/plugin-kit@0.7.1':
766 - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==}
767 - engines: {node: ^20.19.0 || ^22.13.0 || >=24}
768 -
769 - '@exodus/bytes@1.15.0':
770 - resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==}
651 + '@exodus/bytes@1.15.1':
652 + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==}
653 engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
654 peerDependencies:
655 '@noble/hashes': ^1.8.0 || ^2.0.0
@@ -815,26 +697,26 @@ packages:
697 '@iconify/types@2.0.0':
698 resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
699
818 - '@iconify/vue@5.0.0':
819 - resolution: {integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==}
700 + '@iconify/vue@5.0.1':
701 + resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==}
702 peerDependencies:
821 - vue: '>=3'
703 + vue: '>=3.0.0'
704
823 - '@intlify/core-base@11.3.2':
824 - resolution: {integrity: sha512-cgsUaV/dyD6aS49UPgerIblrWeXAZHNaDWqm4LujOGC7IafSyhghGXEiSVvuDYaDPiQTP+tSFSTM1HIu7Yp1nA==}
825 - engines: {node: '>= 16'}
705 + '@intlify/core-base@11.4.4':
706 + resolution: {integrity: sha512-w/vItlylrAmhebkIbVl5YY8XMCtj8Mb2g70ttxktMYuf5AuRahgEHL2iLgLIsZBIbTSgs4hkUo7ucCL0uTJvOg==}
707 + engines: {node: '>= 22'}
708
827 - '@intlify/devtools-types@11.3.2':
828 - resolution: {integrity: sha512-q96G2ZZw0FNoXzejbjIf9dbfgz1xyYBZu6ZT4b5TE/55j8d1O9X5jv0k+U+L3fVe7uebPcqRQFD0ffm30i5mJA==}
829 - engines: {node: '>= 16'}
709 + '@intlify/devtools-types@11.4.4':
710 + resolution: {integrity: sha512-PcBLmGmDQsTSVV911P8upzpcLJO1CNVYi/IH6bGnLR2nA+0L963+kXN1ZrisTEnbtw2ewN6HMMSldqzjronA0Q==}
711 + engines: {node: '>= 22'}
712
831 - '@intlify/message-compiler@11.3.2':
832 - resolution: {integrity: sha512-d/awyHUkNSaGPxBxT/qlUpfRizxHX9dt55CnW03xx5p1KmMyfYHKupCnvzINX+Na8JR8LAR7y32lPKjoeQGmzA==}
833 - engines: {node: '>= 16'}
713 + '@intlify/message-compiler@11.4.4':
714 + resolution: {integrity: sha512-vn0OAV9pYkJlPPmgnsSm5eAG3mL0+9C/oaded2JY9jmxBbhmUXT3TcAUY8WRgLY9Hte7lkUJKpXrVlYjMXBD2w==}
715 + engines: {node: '>= 22'}
716
835 - '@intlify/shared@11.3.2':
836 - resolution: {integrity: sha512-x66fjdH6i+lNYPae5URSQGTjBL68Av6hi09jvC5Ci96iTkwfqrPhCj46aylQZmgMaG89rOZCIKqS7ApC8ZDVjg==}
837 - engines: {node: '>= 16'}
717 + '@intlify/shared@11.4.4':
718 + resolution: {integrity: sha512-QRUCHqda1U6aR14FR0vvXD4+4gj6+fm0AhAozvSuRCw0fCvrmCugWpgiR4xH2NI6s8am6N9p5OhirplsX8ZS3g==}
719 + engines: {node: '>= 22'}
720
721 '@jridgewell/gen-mapping@0.3.13':
722 resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -852,20 +734,20 @@ packages:
734 '@jridgewell/trace-mapping@0.3.31':
735 resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
736
855 - '@jscpd/badge-reporter@4.0.5':
856 - resolution: {integrity: sha512-SLVhP00R9lkQ//Ivaanfm7k0L9sewpBven670kk1uGec2SWUOa7MVQcuad/TV59KEZ73UIC1lXvi6O9hAnbpUw==}
737 + '@jscpd/badge-reporter@4.2.4':
738 + resolution: {integrity: sha512-g5vu05u0lX9rcHA0k3CptLfpOiuMzxh5+mUe2iYRAznTwH3ks6JAVAf9aPi5mBFttMCRiJh2zSt3xnSadHtMGg==}
739
858 - '@jscpd/core@4.0.5':
859 - resolution: {integrity: sha512-Udvym21nWzxjYRVXwwpYNBqZ6b50QV2zHN3fFNzOPPg4cfQVYOZerILB7xNDUsXHC1PCr/N52Tq3q7AElvjWWA==}
740 + '@jscpd/core@4.2.4':
741 + resolution: {integrity: sha512-9V9YzmmhYg9682kFqi+n0KGOhXNSoqxHbuIP3i/l/oSd6upBOnnSeBWDZMGOenQRQnyKEtCIbnS9YFz+3B+siQ==}
742
861 - '@jscpd/finder@4.0.5':
862 - resolution: {integrity: sha512-/2VkRoVrrfya+51sitZo5I9MdwsRaPKB8X3L3khAYoHFXk4L/mUuG81RmGazDHjUIGg22ItlkQtwzorNZ2+aPw==}
743 + '@jscpd/finder@4.2.4':
744 + resolution: {integrity: sha512-4LLEuAAmAraud/TAAlB5BByVdWfy7SYiPKacj5yEggpkNs0qsw2kiZ5EyU3LonB+/vntJJEDDpJMmvOeS58e0A==}
745
864 - '@jscpd/html-reporter@4.0.5':
865 - resolution: {integrity: sha512-drK2J8KyPIW9wvaElSIobZFp4dBO9GA++JW4gx3oihvLdDSp8qSo/CNqH47Dw0XkjQTxND3j/+Wz5JWvYRBgFQ==}
746 + '@jscpd/html-reporter@4.2.4':
747 + resolution: {integrity: sha512-6UljCTVGf7O+o6D6fs1zNBG+vR1PTn47W2mSgb5hzSrvNw60rLrVoAMZMnr/TeIEdd/OEgAu+icbdvvVBfnvJw==}
748
867 - '@jscpd/tokenizer@4.0.5':
868 - resolution: {integrity: sha512-WzRujQtN5WedxZVDKuoanxmKAFrxcLrHpcA6kaM4z8AhGtWXZ325yseqgL5TZ8OK7Auwu7kQLlqhfk05fGYG7A==}
749 + '@jscpd/tokenizer@4.2.4':
750 + resolution: {integrity: sha512-nM4kGyDvpcevt8t0zOsMQ82ShSc65c3LIQUHClTYwraiOGOmWgUQyen+JIiFCNF8eDCGR2Qa5iI5XBfGWYQzIg==}
751
752 '@juggle/resize-observer@3.4.0':
753 resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -882,6 +764,12 @@ packages:
764 '@marijn/find-cluster-break@1.0.2':
765 resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
766
767 + '@napi-rs/wasm-runtime@1.1.4':
768 + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
769 + peerDependencies:
770 + '@emnapi/core': ^1.7.1
771 + '@emnapi/runtime': ^1.7.1
772 +
773 '@nodelib/fs.scandir@2.1.5':
774 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
775 engines: {node: '>= 8'}
@@ -894,14 +782,17 @@ packages:
782 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
783 engines: {node: '>= 8'}
784
897 - '@nuxt/kit@3.21.2':
898 - resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==}
785 + '@nuxt/kit@3.21.6':
786 + resolution: {integrity: sha512-5VOwxUcoM/z6w4c75hQrikHpY+TzjTLZQ+QnuO7KajyGx0IJBLVy1lw25oy79leF+GgyjJJO1cHfUfWeuEDCzA==}
787 engines: {node: '>=18.12.0'}
788
789 '@ota-meshi/ast-token-store@0.3.0':
790 resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==}
791 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
792
793 + '@oxc-project/types@0.130.0':
794 + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==}
795 +
796 '@parcel/watcher-android-arm64@2.5.6':
797 resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
798 engines: {node: '>= 10.0.0'}
@@ -990,9 +881,9 @@ packages:
881 resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
882 engines: {node: '>= 10.0.0'}
883
993 - '@pkgr/core@0.2.9':
994 - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
995 - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
884 + '@pkgr/core@0.3.6':
885 + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
886 + engines: {node: ^14.18.0 || >=16.0.0}
887
888 '@polka/url@1.0.0-next.29':
889 resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
@@ -1000,168 +891,128 @@ packages:
891 '@quansync/fs@1.0.0':
892 resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
893
1003 - '@rolldown/pluginutils@1.0.0-rc.13':
1004 - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==}
1005 -
1006 - '@rolldown/pluginutils@1.0.0-rc.16':
1007 - resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==}
1008 -
1009 - '@rollup/rollup-android-arm-eabi@4.60.2':
1010 - resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==}
1011 - cpu: [arm]
1012 - os: [android]
1013 -
1014 - '@rollup/rollup-android-arm64@4.60.2':
1015 - resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
894 + '@rolldown/binding-android-arm64@1.0.1':
895 + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==}
896 + engines: {node: ^20.19.0 || >=22.12.0}
897 cpu: [arm64]
898 os: [android]
899
1019 - '@rollup/rollup-darwin-arm64@4.60.2':
1020 - resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
900 + '@rolldown/binding-darwin-arm64@1.0.1':
901 + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==}
902 + engines: {node: ^20.19.0 || >=22.12.0}
903 cpu: [arm64]
904 os: [darwin]
905
1024 - '@rollup/rollup-darwin-x64@4.60.2':
1025 - resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
906 + '@rolldown/binding-darwin-x64@1.0.1':
907 + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==}
908 + engines: {node: ^20.19.0 || >=22.12.0}
909 cpu: [x64]
910 os: [darwin]
911
1029 - '@rollup/rollup-freebsd-arm64@4.60.2':
1030 - resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
1031 - cpu: [arm64]
1032 - os: [freebsd]
1033 -
1034 - '@rollup/rollup-freebsd-x64@4.60.2':
1035 - resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
912 + '@rolldown/binding-freebsd-x64@1.0.1':
913 + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==}
914 + engines: {node: ^20.19.0 || >=22.12.0}
915 cpu: [x64]
916 os: [freebsd]
917
1039 - '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
1040 - resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
1041 - cpu: [arm]
1042 - os: [linux]
1043 - libc: [glibc]
1044 -
1045 - '@rollup/rollup-linux-arm-musleabihf@4.60.2':
1046 - resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
918 + '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
919 + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==}
920 + engines: {node: ^20.19.0 || >=22.12.0}
921 cpu: [arm]
922 os: [linux]
1049 - libc: [musl]
923
1051 - '@rollup/rollup-linux-arm64-gnu@4.60.2':
1052 - resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
924 + '@rolldown/binding-linux-arm64-gnu@1.0.1':
925 + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==}
926 + engines: {node: ^20.19.0 || >=22.12.0}
927 cpu: [arm64]
928 os: [linux]
929 libc: [glibc]
930
1057 - '@rollup/rollup-linux-arm64-musl@4.60.2':
1058 - resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
931 + '@rolldown/binding-linux-arm64-musl@1.0.1':
932 + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==}
933 + engines: {node: ^20.19.0 || >=22.12.0}
934 cpu: [arm64]
935 os: [linux]
936 libc: [musl]
937
1063 - '@rollup/rollup-linux-loong64-gnu@4.60.2':
1064 - resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
1065 - cpu: [loong64]
1066 - os: [linux]
1067 - libc: [glibc]
1068 -
1069 - '@rollup/rollup-linux-loong64-musl@4.60.2':
1070 - resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
1071 - cpu: [loong64]
1072 - os: [linux]
1073 - libc: [musl]
1074 -
1075 - '@rollup/rollup-linux-ppc64-gnu@4.60.2':
1076 - resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
1077 - cpu: [ppc64]
1078 - os: [linux]
1079 - libc: [glibc]
1080 -
1081 - '@rollup/rollup-linux-ppc64-musl@4.60.2':
1082 - resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
938 + '@rolldown/binding-linux-ppc64-gnu@1.0.1':
939 + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==}
940 + engines: {node: ^20.19.0 || >=22.12.0}
941 cpu: [ppc64]
942 os: [linux]
1085 - libc: [musl]
1086 -
1087 - '@rollup/rollup-linux-riscv64-gnu@4.60.2':
1088 - resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
1089 - cpu: [riscv64]
1090 - os: [linux]
943 libc: [glibc]
944
1093 - '@rollup/rollup-linux-riscv64-musl@4.60.2':
1094 - resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
1095 - cpu: [riscv64]
1096 - os: [linux]
1097 - libc: [musl]
1098 -
1099 - '@rollup/rollup-linux-s390x-gnu@4.60.2':
1100 - resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
945 + '@rolldown/binding-linux-s390x-gnu@1.0.1':
946 + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==}
947 + engines: {node: ^20.19.0 || >=22.12.0}
948 cpu: [s390x]
949 os: [linux]
950 libc: [glibc]
951
1105 - '@rollup/rollup-linux-x64-gnu@4.60.2':
1106 - resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
952 + '@rolldown/binding-linux-x64-gnu@1.0.1':
953 + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==}
954 + engines: {node: ^20.19.0 || >=22.12.0}
955 cpu: [x64]
956 os: [linux]
957 libc: [glibc]
958
1111 - '@rollup/rollup-linux-x64-musl@4.60.2':
1112 - resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
959 + '@rolldown/binding-linux-x64-musl@1.0.1':
960 + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==}
961 + engines: {node: ^20.19.0 || >=22.12.0}
962 cpu: [x64]
963 os: [linux]
964 libc: [musl]
965
1117 - '@rollup/rollup-openbsd-x64@4.60.2':
1118 - resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
1119 - cpu: [x64]
1120 - os: [openbsd]
1121 -
1122 - '@rollup/rollup-openharmony-arm64@4.60.2':
1123 - resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
966 + '@rolldown/binding-openharmony-arm64@1.0.1':
967 + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==}
968 + engines: {node: ^20.19.0 || >=22.12.0}
969 cpu: [arm64]
970 os: [openharmony]
971
1127 - '@rollup/rollup-win32-arm64-msvc@4.60.2':
1128 - resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
1129 - cpu: [arm64]
1130 - os: [win32]
972 + '@rolldown/binding-wasm32-wasi@1.0.1':
973 + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==}
974 + engines: {node: ^20.19.0 || >=22.12.0}
975 + cpu: [wasm32]
976
1132 - '@rollup/rollup-win32-ia32-msvc@4.60.2':
1133 - resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
1134 - cpu: [ia32]
977 + '@rolldown/binding-win32-arm64-msvc@1.0.1':
978 + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==}
979 + engines: {node: ^20.19.0 || >=22.12.0}
980 + cpu: [arm64]
981 os: [win32]
982
1137 - '@rollup/rollup-win32-x64-gnu@4.60.2':
1138 - resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
983 + '@rolldown/binding-win32-x64-msvc@1.0.1':
984 + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==}
985 + engines: {node: ^20.19.0 || >=22.12.0}
986 cpu: [x64]
987 os: [win32]
988
1142 - '@rollup/rollup-win32-x64-msvc@4.60.2':
1143 - resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
989 + '@rolldown/pluginutils@1.0.1':
990 + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
991 +
992 + '@rollup/rollup-linux-x64-gnu@4.61.0':
993 + resolution: {integrity: sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==}
994 cpu: [x64]
1145 - os: [win32]
995 + os: [linux]
996 + libc: [glibc]
997
1147 - '@shikijs/core@4.0.2':
1148 - resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==}
998 + '@shikijs/core@4.1.0':
999 + resolution: {integrity: sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ==}
1000 engines: {node: '>=20'}
1001
1151 - '@shikijs/engine-javascript@4.0.2':
1152 - resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==}
1002 + '@shikijs/engine-javascript@4.1.0':
1003 + resolution: {integrity: sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ==}
1004 engines: {node: '>=20'}
1005
1155 - '@shikijs/engine-oniguruma@4.0.2':
1156 - resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==}
1006 + '@shikijs/engine-oniguruma@4.1.0':
1007 + resolution: {integrity: sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg==}
1008 engines: {node: '>=20'}
1009
1159 - '@shikijs/langs@4.0.2':
1160 - resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==}
1010 + '@shikijs/langs@4.1.0':
1011 + resolution: {integrity: sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg==}
1012 engines: {node: '>=20'}
1013
1163 - '@shikijs/markdown-it@4.0.2':
1164 - resolution: {integrity: sha512-7DDEhknj/mXTN7ME8CjKWBv5O/4YgOiJBZLgs/NbUFMC7Ik1x/VEhaK+aBjX60bJdok0E2mxEYan/GzJ2xRx+A==}
1014 + '@shikijs/markdown-it@4.1.0':
1015 + resolution: {integrity: sha512-qGtTnWF3FG/fDS2wMkE5abMYeGm1l1VVjSUoEOhtr13xk5CtqrdVorEYwKnrLCSpeTjU+j3lY/fWHEJI+m8n6g==}
1016 engines: {node: '>=20'}
1017 peerDependencies:
1018 markdown-it-async: ^2.2.0
@@ -1169,16 +1020,16 @@ packages:
1020 markdown-it-async:
1021 optional: true
1022
1172 - '@shikijs/primitive@4.0.2':
1173 - resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==}
1023 + '@shikijs/primitive@4.1.0':
1024 + resolution: {integrity: sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw==}
1025 engines: {node: '>=20'}
1026
1176 - '@shikijs/themes@4.0.2':
1177 - resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==}
1027 + '@shikijs/themes@4.1.0':
1028 + resolution: {integrity: sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw==}
1029 engines: {node: '>=20'}
1030
1180 - '@shikijs/types@4.0.2':
1181 - resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==}
1031 + '@shikijs/types@4.1.0':
1032 + resolution: {integrity: sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA==}
1033 engines: {node: '>=20'}
1034
1035 '@shikijs/vscode-textmate@10.0.2':
@@ -1194,69 +1045,69 @@ packages:
1045 peerDependencies:
1046 eslint: ^9.0.0 || ^10.0.0
1047
1197 - '@tailwindcss/node@4.2.2':
1198 - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==}
1048 + '@tailwindcss/node@4.3.0':
1049 + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==}
1050
1200 - '@tailwindcss/oxide-android-arm64@4.2.2':
1201 - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==}
1051 + '@tailwindcss/oxide-android-arm64@4.3.0':
1052 + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==}
1053 engines: {node: '>= 20'}
1054 cpu: [arm64]
1055 os: [android]
1056
1206 - '@tailwindcss/oxide-darwin-arm64@4.2.2':
1207 - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==}
1057 + '@tailwindcss/oxide-darwin-arm64@4.3.0':
1058 + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==}
1059 engines: {node: '>= 20'}
1060 cpu: [arm64]
1061 os: [darwin]
1062
1212 - '@tailwindcss/oxide-darwin-x64@4.2.2':
1213 - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==}
1063 + '@tailwindcss/oxide-darwin-x64@4.3.0':
1064 + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==}
1065 engines: {node: '>= 20'}
1066 cpu: [x64]
1067 os: [darwin]
1068
1218 - '@tailwindcss/oxide-freebsd-x64@4.2.2':
1219 - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==}
1069 + '@tailwindcss/oxide-freebsd-x64@4.3.0':
1070 + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==}
1071 engines: {node: '>= 20'}
1072 cpu: [x64]
1073 os: [freebsd]
1074
1224 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
1225 - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==}
1075 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0':
1076 + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==}
1077 engines: {node: '>= 20'}
1078 cpu: [arm]
1079 os: [linux]
1080
1230 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
1231 - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
1081 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0':
1082 + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==}
1083 engines: {node: '>= 20'}
1084 cpu: [arm64]
1085 os: [linux]
1086 libc: [glibc]
1087
1237 - '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
1238 - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
1088 + '@tailwindcss/oxide-linux-arm64-musl@4.3.0':
1089 + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==}
1090 engines: {node: '>= 20'}
1091 cpu: [arm64]
1092 os: [linux]
1093 libc: [musl]
1094
1244 - '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
1245 - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
1095 + '@tailwindcss/oxide-linux-x64-gnu@4.3.0':
1096 + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==}
1097 engines: {node: '>= 20'}
1098 cpu: [x64]
1099 os: [linux]
1100 libc: [glibc]
1101
1251 - '@tailwindcss/oxide-linux-x64-musl@4.2.2':
1252 - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
1102 + '@tailwindcss/oxide-linux-x64-musl@4.3.0':
1103 + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==}
1104 engines: {node: '>= 20'}
1105 cpu: [x64]
1106 os: [linux]
1107 libc: [musl]
1108
1258 - '@tailwindcss/oxide-wasm32-wasi@4.2.2':
1259 - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==}
1109 + '@tailwindcss/oxide-wasm32-wasi@4.3.0':
1110 + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==}
1111 engines: {node: '>=14.0.0'}
1112 cpu: [wasm32]
1113 bundledDependencies:
@@ -1267,30 +1118,33 @@ packages:
1118 - '@emnapi/wasi-threads'
1119 - tslib
1120
1270 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
1271 - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==}
1121 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0':
1122 + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==}
1123 engines: {node: '>= 20'}
1124 cpu: [arm64]
1125 os: [win32]
1126
1276 - '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
1277 - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==}
1127 + '@tailwindcss/oxide-win32-x64-msvc@4.3.0':
1128 + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==}
1129 engines: {node: '>= 20'}
1130 cpu: [x64]
1131 os: [win32]
1132
1282 - '@tailwindcss/oxide@4.2.2':
1283 - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==}
1133 + '@tailwindcss/oxide@4.3.0':
1134 + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==}
1135 engines: {node: '>= 20'}
1136
1286 - '@tailwindcss/vite@4.2.2':
1287 - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==}
1137 + '@tailwindcss/vite@4.3.0':
1138 + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==}
1139 peerDependencies:
1140 vite: ^5.2.0 || ^6 || ^7 || ^8
1141
1142 '@tsconfig/node20@20.1.9':
1143 resolution: {integrity: sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==}
1144
1145 + '@tybys/wasm-util@0.10.2':
1146 + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
1147 +
1148 '@types/bytes@3.1.5':
1149 resolution: {integrity: sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==}
1150
@@ -1300,8 +1154,8 @@ packages:
1154 '@types/esrecurse@4.3.1':
1155 resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
1156
1303 - '@types/estree@1.0.8':
1304 - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
1157 + '@types/estree@1.0.9':
1158 + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
1159
1160 '@types/file-saver@2.0.7':
1161 resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==}
@@ -1312,8 +1166,11 @@ packages:
1166 '@types/hast@3.0.4':
1167 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
1168
1315 - '@types/jsdom@28.0.1':
1316 - resolution: {integrity: sha512-GJq2QE4TAZ5ajSoCasn5DOFm8u1mI3tIFvM5tIq3W5U/RTB6gsHwc6Yhpl91X9VSDOUVblgXmG+2+sSvFQrdlw==}
1169 + '@types/jsdom@28.0.3':
1170 + resolution: {integrity: sha512-/HQ2uFoetFTXuye8vzIcHw2z6Fwi7Hi/qcgC+RoS9NCyewiqxhVGqlG+ViGB6lkax481R6dmhf1I7lIGlzJStQ==}
1171 +
1172 + '@types/jsesc@2.5.1':
1173 + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
1174
1175 '@types/json-schema@7.0.15':
1176 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -1348,8 +1205,8 @@ packages:
1205 '@types/ms@2.1.0':
1206 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
1207
1351 - '@types/node@25.6.0':
1352 - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
1208 + '@types/node@25.9.1':
1209 + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==}
1210
1211 '@types/parse-json@4.0.2':
1212 resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -1369,73 +1226,74 @@ packages:
1226 '@types/web-bluetooth@0.0.21':
1227 resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
1228
1372 - '@typescript-eslint/eslint-plugin@8.58.2':
1373 - resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==}
1229 + '@typescript-eslint/eslint-plugin@8.60.1':
1230 + resolution: {integrity: sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==}
1231 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1232 peerDependencies:
1376 - '@typescript-eslint/parser': ^8.58.2
1233 + '@typescript-eslint/parser': ^8.60.1
1234 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1235 typescript: '>=4.8.4 <6.1.0'
1236
1380 - '@typescript-eslint/parser@8.58.2':
1381 - resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==}
1237 + '@typescript-eslint/parser@8.60.1':
1238 + resolution: {integrity: sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==}
1239 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1240 peerDependencies:
1241 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1242 typescript: '>=4.8.4 <6.1.0'
1243
1387 - '@typescript-eslint/project-service@8.58.2':
1388 - resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==}
1244 + '@typescript-eslint/project-service@8.60.1':
1245 + resolution: {integrity: sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==}
1246 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1247 peerDependencies:
1248 typescript: '>=4.8.4 <6.1.0'
1249
1393 - '@typescript-eslint/rule-tester@8.58.2':
1394 - resolution: {integrity: sha512-HF7ry5ZhQSLn4JAJfQCPX39D6BE5MhYXE743I0phrJw1BvB0adH8JpsEc4owCxEESQflodyhRWNUZY+m2EVenw==}
1250 + '@typescript-eslint/rule-tester@8.60.1':
1251 + resolution: {integrity: sha512-ly/WFKd5EwhTpuFbgQ81Z+67o4DRnlgKy+yHTuHWTy/u8yb0nEVPjDKqVUkJ1545vX2aAW1TELNSPPs+AOC+KA==}
1252 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1253 peerDependencies:
1254 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1255 + typescript: '>=4.8.4 <6.1.0'
1256
1399 - '@typescript-eslint/scope-manager@8.58.2':
1400 - resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==}
1257 + '@typescript-eslint/scope-manager@8.60.1':
1258 + resolution: {integrity: sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==}
1259 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1260
1403 - '@typescript-eslint/tsconfig-utils@8.58.2':
1404 - resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==}
1261 + '@typescript-eslint/tsconfig-utils@8.60.1':
1262 + resolution: {integrity: sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==}
1263 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1264 peerDependencies:
1265 typescript: '>=4.8.4 <6.1.0'
1266
1409 - '@typescript-eslint/type-utils@8.58.2':
1410 - resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==}
1267 + '@typescript-eslint/type-utils@8.60.1':
1268 + resolution: {integrity: sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==}
1269 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1270 peerDependencies:
1271 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1272 typescript: '>=4.8.4 <6.1.0'
1273
1416 - '@typescript-eslint/types@8.58.2':
1417 - resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==}
1274 + '@typescript-eslint/types@8.60.1':
1275 + resolution: {integrity: sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==}
1276 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1277
1420 - '@typescript-eslint/typescript-estree@8.58.2':
1421 - resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==}
1278 + '@typescript-eslint/typescript-estree@8.60.1':
1279 + resolution: {integrity: sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==}
1280 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1281 peerDependencies:
1282 typescript: '>=4.8.4 <6.1.0'
1283
1426 - '@typescript-eslint/utils@8.58.2':
1427 - resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==}
1284 + '@typescript-eslint/utils@8.60.1':
1285 + resolution: {integrity: sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==}
1286 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1287 peerDependencies:
1288 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1289 typescript: '>=4.8.4 <6.1.0'
1290
1433 - '@typescript-eslint/visitor-keys@8.58.2':
1434 - resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==}
1291 + '@typescript-eslint/visitor-keys@8.60.1':
1292 + resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==}
1293 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1294
1437 - '@ungap/structured-clone@1.3.0':
1438 - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
1295 + '@ungap/structured-clone@1.3.1':
1296 + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==}
1297
1298 '@vitejs/plugin-vue-jsx@5.1.5':
1299 resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
@@ -1444,15 +1302,15 @@ packages:
1302 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1303 vue: ^3.0.0
1304
1447 - '@vitejs/plugin-vue@6.0.6':
1448 - resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==}
1305 + '@vitejs/plugin-vue@6.0.7':
1306 + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==}
1307 engines: {node: ^20.19.0 || >=22.12.0}
1308 peerDependencies:
1309 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1310 vue: ^3.2.25
1311
1454 - '@vitest/eslint-plugin@1.6.16':
1455 - resolution: {integrity: sha512-2pBN1F1JXq6zTSaYC58CMJa7pGxXIRsLfOioeZM4cPE3pRdSh1ySTSoHPQlOTEF5WgoVzWZQxhGQ3ygT78hOVg==}
1312 + '@vitest/eslint-plugin@1.6.19':
1313 + resolution: {integrity: sha512-zodmXRsVKFsuHxHJILuTFaaKsrsxm0YsiOX65clk+LpCW9JrVXaf6ERXr0caDs+NEk0S62Jyk0K7XYQ7gWXheA==}
1314 engines: {node: '>=18'}
1315 peerDependencies:
1316 '@typescript-eslint/eslint-plugin': '*'
@@ -1517,17 +1375,17 @@ packages:
1375 peerDependencies:
1376 '@babel/core': ^7.0.0-0
1377
1520 - '@vue/compiler-core@3.5.32':
1521 - resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==}
1378 + '@vue/compiler-core@3.5.35':
1379 + resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==}
1380
1523 - '@vue/compiler-dom@3.5.32':
1524 - resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==}
1381 + '@vue/compiler-dom@3.5.35':
1382 + resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==}
1383
1526 - '@vue/compiler-sfc@3.5.32':
1527 - resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==}
1384 + '@vue/compiler-sfc@3.5.35':
1385 + resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==}
1386
1529 - '@vue/compiler-ssr@3.5.32':
1530 - resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==}
1387 + '@vue/compiler-ssr@3.5.35':
1388 + resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==}
1389
1390 '@vue/devtools-api@6.6.4':
1391 resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
@@ -1535,45 +1393,45 @@ packages:
1393 '@vue/devtools-api@7.7.9':
1394 resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
1395
1538 - '@vue/devtools-api@8.1.1':
1539 - resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
1396 + '@vue/devtools-api@8.1.2':
1397 + resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==}
1398
1541 - '@vue/devtools-core@8.1.1':
1542 - resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==}
1399 + '@vue/devtools-core@8.1.2':
1400 + resolution: {integrity: sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==}
1401 peerDependencies:
1402 vue: ^3.0.0
1403
1404 '@vue/devtools-kit@7.7.9':
1405 resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
1406
1549 - '@vue/devtools-kit@8.1.1':
1550 - resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
1407 + '@vue/devtools-kit@8.1.2':
1408 + resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==}
1409
1410 '@vue/devtools-shared@7.7.9':
1411 resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
1412
1555 - '@vue/devtools-shared@8.1.1':
1556 - resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
1413 + '@vue/devtools-shared@8.1.2':
1414 + resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==}
1415
1558 - '@vue/language-core@3.2.7':
1559 - resolution: {integrity: sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==}
1416 + '@vue/language-core@3.3.3':
1417 + resolution: {integrity: sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ==}
1418
1561 - '@vue/reactivity@3.5.32':
1562 - resolution: {integrity: sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==}
1419 + '@vue/reactivity@3.5.35':
1420 + resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==}
1421
1564 - '@vue/runtime-core@3.5.32':
1565 - resolution: {integrity: sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==}
1422 + '@vue/runtime-core@3.5.35':
1423 + resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==}
1424
1567 - '@vue/runtime-dom@3.5.32':
1568 - resolution: {integrity: sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==}
1425 + '@vue/runtime-dom@3.5.35':
1426 + resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==}
1427
1570 - '@vue/server-renderer@3.5.32':
1571 - resolution: {integrity: sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==}
1428 + '@vue/server-renderer@3.5.35':
1429 + resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==}
1430 peerDependencies:
1573 - vue: 3.5.32
1431 + vue: 3.5.35
1432
1575 - '@vue/shared@3.5.32':
1576 - resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==}
1433 + '@vue/shared@3.5.35':
1434 + resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==}
1435
1436 '@vue/tsconfig@0.9.1':
1437 resolution: {integrity: sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==}
@@ -1591,16 +1449,16 @@ packages:
1449 peerDependencies:
1450 vue: ^3.5.0
1451
1594 - '@vueuse/core@14.2.1':
1595 - resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==}
1452 + '@vueuse/core@14.3.0':
1453 + resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
1454 peerDependencies:
1455 vue: ^3.5.0
1456
1457 '@vueuse/metadata@13.9.0':
1458 resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==}
1459
1602 - '@vueuse/metadata@14.2.1':
1603 - resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==}
1460 + '@vueuse/metadata@14.3.0':
1461 + resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
1462
1463 '@vueuse/motion@3.0.3':
1464 resolution: {integrity: sha512-4B+ITsxCI9cojikvrpaJcLXyq0spj3sdlzXjzesWdMRd99hhtFI6OJ/1JsqwtF73YooLe0hUn/xDR6qCtmn5GQ==}
@@ -1612,8 +1470,8 @@ packages:
1470 peerDependencies:
1471 vue: ^3.5.0
1472
1615 - '@vueuse/shared@14.2.1':
1616 - resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==}
1473 + '@vueuse/shared@14.3.0':
1474 + resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
1475 peerDependencies:
1476 vue: ^3.5.0
1477
@@ -1632,11 +1490,15 @@ packages:
1490 engines: {node: '>=0.4.0'}
1491 hasBin: true
1492
1635 - ajv@6.14.0:
1636 - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
1493 + agent-base@6.0.2:
1494 + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
1495 + engines: {node: '>= 6.0.0'}
1496 +
1497 + ajv@6.15.0:
1498 + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
1499
1638 - alien-signals@3.1.2:
1639 - resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==}
1500 + alien-signals@3.2.1:
1501 + resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==}
1502
1503 ansi-regex@5.0.1:
1504 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -1650,13 +1512,10 @@ packages:
1512 resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
1513 engines: {node: '>=12'}
1514
1653 - ansis@4.2.0:
1654 - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
1515 + ansis@4.3.1:
1516 + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
1517 engines: {node: '>=14'}
1518
1657 - apexcharts@5.10.6:
1658 - resolution: {integrity: sha512-FJQGbso3iRuOwUYnj0yUhkWeKeJE6aboVol+ae09lsc+lbLMWZqSRbrAWVa/qishLiaeG2icxdvmVkm+9n6kOQ==}
1659 -
1519 are-docs-informative@0.0.2:
1520 resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
1521 engines: {node: '>=14'}
@@ -1689,8 +1548,8 @@ packages:
1548 resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
1549 engines: {node: '>=20.19.0'}
1550
1692 - ast-walker-scope@0.8.3:
1693 - resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==}
1551 + ast-walker-scope@0.9.0:
1552 + resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==}
1553 engines: {node: '>=20.19.0'}
1554
1555 async-validator@4.2.5:
@@ -1699,15 +1558,15 @@ packages:
1558 asynckit@0.4.0:
1559 resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
1560
1702 - axios@1.15.1:
1703 - resolution: {integrity: sha512-WOG+Jj8ZOvR0a3rAn+Tuf1UQJRxw5venr6DgdbJzngJE3qG7X0kL83CZGpdHMxEm+ZK3seAbvFsw4FfOfP9vxg==}
1561 + axios@1.16.1:
1562 + resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==}
1563
1564 babel-walk@3.0.0-canary-5:
1565 resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
1566 engines: {node: '>= 10.0.0'}
1567
1709 - badgen@3.2.3:
1710 - resolution: {integrity: sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==}
1568 + badgen@3.3.2:
1569 + resolution: {integrity: sha512-fbQwK9norfdzbdsoPwbLIAmgBXDGEme3jeIyqPAH7o6vp9lmuLHS7uXULvOiQ6XnMLkYNG4gDjILf74hgtTAug==}
1570
1571 balanced-match@1.0.2:
1572 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1716,8 +1575,8 @@ packages:
1575 resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
1576 engines: {node: 18 || 20 || >=22}
1577
1719 - baseline-browser-mapping@2.10.20:
1720 - resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==}
1578 + baseline-browser-mapping@2.10.33:
1579 + resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==}
1580 engines: {node: '>=6.0.0'}
1581 hasBin: true
1582
@@ -1727,6 +1586,9 @@ packages:
1586 birpc@2.9.0:
1587 resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
1588
1589 + birpc@4.0.0:
1590 + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
1591 +
1592 blamer@1.0.7:
1593 resolution: {integrity: sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==}
1594 engines: {node: '>=8.9'}
@@ -1734,14 +1596,14 @@ packages:
1596 boolbase@1.0.0:
1597 resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
1598
1737 - brace-expansion@1.1.14:
1738 - resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==}
1599 + brace-expansion@1.1.15:
1600 + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==}
1601
1740 - brace-expansion@2.1.0:
1741 - resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
1602 + brace-expansion@2.1.1:
1603 + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==}
1604
1743 - brace-expansion@5.0.5:
1744 - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
1605 + brace-expansion@5.0.6:
1606 + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
1607 engines: {node: 18 || 20 || >=22}
1608
1609 braces@3.0.3:
@@ -1753,8 +1615,8 @@ packages:
1615 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1616 hasBin: true
1617
1756 - builtin-modules@5.1.0:
1757 - resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==}
1618 + builtin-modules@5.2.0:
1619 + resolution: {integrity: sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==}
1620 engines: {node: '>=18.20'}
1621
1622 bundle-name@4.1.0:
@@ -1800,8 +1662,8 @@ packages:
1662 resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
1663 engines: {node: '>=10'}
1664
1803 - caniuse-lite@1.0.30001788:
1804 - resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==}
1665 + caniuse-lite@1.0.30001793:
1666 + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==}
1667
1668 ccount@2.0.1:
1669 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1821,10 +1683,6 @@ packages:
1683 character-parser@2.2.0:
1684 resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
1685
1824 - chokidar@4.0.3:
1825 - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
1826 - engines: {node: '>= 14.16.0'}
1827 -
1686 chokidar@5.0.0:
1687 resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
1688 engines: {node: '>= 20.19.0'}
@@ -1895,6 +1753,10 @@ packages:
1753 resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==}
1754 engines: {node: '>= 12.0.0'}
1755
1756 + comment-parser@1.4.7:
1757 + resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==}
1758 + engines: {node: '>= 12.0.0'}
1759 +
1760 concat-map@0.0.1:
1761 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1762
@@ -1981,11 +1843,11 @@ packages:
1843 peerDependencies:
1844 date-fns: ^3.0.0 || ^4.0.0
1845
1984 - date-fns@4.1.0:
1985 - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
1846 + date-fns@4.4.0:
1847 + resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==}
1848
1987 - dayjs@1.11.20:
1988 - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
1849 + dayjs@1.11.21:
1850 + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==}
1851
1852 debounce@1.2.1:
1853 resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
@@ -2091,38 +1953,38 @@ packages:
1953 easy-bem@1.1.1:
1954 resolution: {integrity: sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==}
1955
2094 - echarts@6.0.0:
2095 - resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==}
1956 + echarts@6.1.0:
1957 + resolution: {integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==}
1958
2097 - electron-to-chromium@1.5.340:
2098 - resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==}
1959 + electron-to-chromium@1.5.364:
1960 + resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==}
1961
1962 emoji-regex@8.0.0:
1963 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1964
2103 - empathic@2.0.0:
2104 - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
1965 + empathic@2.0.1:
1966 + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
1967 engines: {node: '>=14'}
1968
1969 end-of-stream@1.4.5:
1970 resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
1971
2110 - enhanced-resolve@5.20.1:
2111 - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
1972 + enhanced-resolve@5.22.1:
1973 + resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==}
1974 engines: {node: '>=10.13.0'}
1975
1976 entities@4.5.0:
1977 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1978 engines: {node: '>=0.12'}
1979
2118 - entities@6.0.1:
2119 - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
2120 - engines: {node: '>=0.12'}
2121 -
1980 entities@7.0.1:
1981 resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
1982 engines: {node: '>=0.12'}
1983
1984 + entities@8.0.0:
1985 + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
1986 + engines: {node: '>=20.19.0'}
1987 +
1988 error-ex@1.3.4:
1989 resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
1990
@@ -2140,19 +2002,14 @@ packages:
2002 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
2003 engines: {node: '>= 0.4'}
2004
2143 - es-object-atoms@1.1.1:
2144 - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
2005 + es-object-atoms@1.1.2:
2006 + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==}
2007 engines: {node: '>= 0.4'}
2008
2009 es-set-tostringtag@2.1.0:
2010 resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
2011 engines: {node: '>= 0.4'}
2012
2151 - esbuild@0.27.7:
2152 - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
2153 - engines: {node: '>=18'}
2154 - hasBin: true
2155 -
2013 escalade@3.2.0:
2014 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
2015 engines: {node: '>=6'}
@@ -2180,8 +2037,8 @@ packages:
2037 peerDependencies:
2038 eslint: ^9.5.0 || ^10.0.0
2039
2183 - eslint-flat-config-utils@3.1.0:
2184 - resolution: {integrity: sha512-lM+Nwo2CzpuTS/RASQExlEIwk/BQoKqJWX6VbDlLMb/mveqvt9MMrRXFEkG3bseuK6g8noKZLeX82epkILtv4A==}
2040 + eslint-flat-config-utils@3.2.0:
2041 + resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==}
2042
2043 eslint-json-compat-utils@0.2.3:
2044 resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==}
@@ -2199,8 +2056,8 @@ packages:
2056 peerDependencies:
2057 eslint: '*'
2058
2202 - eslint-plugin-antfu@3.2.2:
2203 - resolution: {integrity: sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==}
2059 + eslint-plugin-antfu@3.2.3:
2060 + resolution: {integrity: sha512-U2fnz/H0gFPxpuC7QpaHa0Jv2AgCZ5hunp36SOP/yWo8yFzgvMh8X4pZ4uN4IKoqtBhk7G3HuVa93Urf51+sZg==}
2061 peerDependencies:
2062 eslint: '*'
2063
@@ -2212,11 +2069,6 @@ packages:
2069 '@typescript-eslint/utils': '*'
2070 eslint: '*'
2071
2215 - eslint-plugin-depend@1.5.0:
2216 - resolution: {integrity: sha512-i3UeLYmclf1Icp35+6W7CR4Bp2PIpDgBuf/mpmXK5UeLkZlvYJ21VuQKKHHAIBKRTPivPGX/gZl5JGno1o9Y0A==}
2217 - peerDependencies:
2218 - eslint: '>=8.40.0'
2219 -
2072 eslint-plugin-es-x@7.8.0:
2073 resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==}
2074 engines: {node: ^14.18.0 || >=16.0.0}
@@ -2235,20 +2087,27 @@ packages:
2087 peerDependencies:
2088 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
2089
2238 - eslint-plugin-jsonc@3.1.2:
2239 - resolution: {integrity: sha512-dopTxdB22iuOkgKyJCupEC5IYBItUT4J/teq1H5ddUObcaYhOURxtJElZczdcYnnKCghNU/vccuyPkliy2Wxsg==}
2090 + eslint-plugin-jsonc@3.2.0:
2091 + resolution: {integrity: sha512-eQSxJypkpNycQAFE/ph/j+bDD2MiCcojxNb+7nugYzuQZvELYg4YO1Cv1y/8MbjPIEw5u3Lx0VPOTlqJJIhPPw==}
2092 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2093 peerDependencies:
2094 eslint: '>=9.38.0'
2095
2244 - eslint-plugin-n@17.24.0:
2245 - resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==}
2246 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2096 + eslint-plugin-n@18.0.1:
2097 + resolution: {integrity: sha512-q3ARhk+eZRc7myR0KHx+R3/GJeOHF+Ir6PK95Pu2tEX8Sl/4BIpmmVLva2kPrjC2gCmn6WHlHm+3yeo6Rxhycw==}
2098 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2099 peerDependencies:
2248 - eslint: '>=8.23.0'
2100 + eslint: '>=8.57.1'
2101 + ts-declaration-location: ^1.0.6
2102 + typescript: '>=5.0.0'
2103 + peerDependenciesMeta:
2104 + ts-declaration-location:
2105 + optional: true
2106 + typescript:
2107 + optional: true
2108
2250 - eslint-plugin-no-only-tests@3.3.0:
2251 - resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
2109 + eslint-plugin-no-only-tests@3.4.0:
2110 + resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==}
2111 engines: {node: '>=5.0.0'}
2112
2113 eslint-plugin-perfectionist@5.9.0:
@@ -2257,8 +2116,8 @@ packages:
2116 peerDependencies:
2117 eslint: ^8.45.0 || ^9.0.0 || ^10.0.0
2118
2260 - eslint-plugin-pnpm@1.6.0:
2261 - resolution: {integrity: sha512-dxmt9r3zvPaft6IugS4i0k16xag3fTbOvm/road5uV9Y8qUCQT0xzheSh3gMlYAlC6vXRpfArBDsTZ7H7JKCbg==}
2119 + eslint-plugin-pnpm@1.6.1:
2120 + resolution: {integrity: sha512-pgcaJclu3YxZ/WMsiKMF58bHQasbGVARSMqCJvFaETYxSc7KcR2H74UVWV6exuGv9nNv9c0KKqn4PVHQlzMSEg==}
2121 peerDependencies:
2122 eslint: ^9.0.0 || ^10.0.0
2123
@@ -2268,8 +2127,8 @@ packages:
2127 peerDependencies:
2128 eslint: '>=9.38.0'
2129
2271 - eslint-plugin-toml@1.3.1:
2272 - resolution: {integrity: sha512-1l00fBP03HIt9IPV7ZxBi7x0y0NMdEZmakL1jBD6N/FoKBvfKxPw5S8XkmzBecOnFBTn5Z8sNJtL5vdf9cpRMQ==}
2130 + eslint-plugin-toml@1.4.0:
2131 + resolution: {integrity: sha512-3ErTnfUjXq/23f72XeyRcE0Y4Sd/ME1lsZeezczqpn2R4tE7+Sgco/NUKDXm0xAMz15tzcRz/9RfJRm6AqRO+A==}
2132 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2133 peerDependencies:
2134 eslint: '>=9.38.0'
@@ -2289,22 +2148,22 @@ packages:
2148 '@typescript-eslint/eslint-plugin':
2149 optional: true
2150
2292 - eslint-plugin-vue@10.8.0:
2293 - resolution: {integrity: sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==}
2151 + eslint-plugin-vue@10.9.1:
2152 + resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==}
2153 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2154 peerDependencies:
2155 '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
2156 '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
2157 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
2299 - vue-eslint-parser: ^10.0.0
2158 + vue-eslint-parser: ^10.3.0
2159 peerDependenciesMeta:
2160 '@stylistic/eslint-plugin':
2161 optional: true
2162 '@typescript-eslint/parser':
2163 optional: true
2164
2306 - eslint-plugin-yml@3.3.1:
2307 - resolution: {integrity: sha512-isntsZchaTqDMNNkD+CakrgA/pdUoJ45USWBKpuqfAW1MCuw731xX/vrXfoJFZU3tTFr24nCbDYmDfT2+g4QtQ==}
2165 + eslint-plugin-yml@3.4.0:
2166 + resolution: {integrity: sha512-j6U3ESrAkidkvNb3HFN2UMxke46GNp6bsJokabXCICcgomSy3YU4oED9cjzkZ58nYxWD5qnWV1b/2YlqyWMOxA==}
2167 engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
2168 peerDependencies:
2169 eslint: '>=9.38.0'
@@ -2331,8 +2190,8 @@ packages:
2190 resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
2191 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2192
2334 - eslint@10.2.1:
2335 - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==}
2193 + eslint@10.4.1:
2194 + resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==}
2195 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2196 hasBin: true
2197 peerDependencies:
@@ -2406,14 +2265,14 @@ packages:
2265 fast-levenshtein@2.0.6:
2266 resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
2267
2409 - fast-string-truncated-width@1.2.1:
2410 - resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
2268 + fast-string-truncated-width@3.0.3:
2269 + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==}
2270
2412 - fast-string-width@1.1.0:
2413 - resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
2271 + fast-string-width@3.0.2:
2272 + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
2273
2415 - fast-wrap-ansi@0.1.6:
2416 - resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
2274 + fast-wrap-ansi@0.2.2:
2275 + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
2276
2277 fastq@1.20.1:
2278 resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
@@ -2484,8 +2343,8 @@ packages:
2343 framesync@6.1.2:
2344 resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==}
2345
2487 - fs-extra@11.3.4:
2488 - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==}
2346 + fs-extra@11.3.5:
2347 + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==}
2348 engines: {node: '>=14.14'}
2349
2350 fsevents@2.3.3:
@@ -2549,8 +2408,8 @@ packages:
2408 resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
2409 engines: {node: '>=18'}
2410
2552 - globals@17.5.0:
2553 - resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==}
2411 + globals@17.6.0:
2412 + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==}
2413 engines: {node: '>=18'}
2414
2415 globrex@0.1.2:
@@ -2571,8 +2430,8 @@ packages:
2430 resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
2431 engines: {node: '>= 0.4'}
2432
2574 - hasown@2.0.3:
2575 - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
2433 + hasown@2.0.4:
2434 + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
2435 engines: {node: '>= 0.4'}
2436
2437 hast-util-to-html@9.0.5:
@@ -2608,6 +2467,10 @@ packages:
2467 html-void-elements@3.0.0:
2468 resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
2469
2470 + https-proxy-agent@5.0.1:
2471 + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
2472 + engines: {node: '>= 6'}
2473 +
2474 human-signals@1.1.1:
2475 resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
2476 engines: {node: '>=8.12.0'}
@@ -2620,8 +2483,8 @@ packages:
2483 resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
2484 engines: {node: '>= 4'}
2485
2623 - immutable@5.1.5:
2624 - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==}
2486 + immutable@5.1.6:
2487 + resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==}
2488
2489 import-fresh@3.3.1:
2490 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
@@ -2652,8 +2515,8 @@ packages:
2515 resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
2516 engines: {node: '>=18.20'}
2517
2655 - is-core-module@2.16.1:
2656 - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
2518 + is-core-module@2.16.2:
2519 + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==}
2520 engines: {node: '>= 0.4'}
2521
2522 is-docker@2.2.1:
@@ -2681,6 +2544,10 @@ packages:
2544 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
2545 engines: {node: '>=0.10.0'}
2546
2547 + is-in-ssh@1.0.0:
2548 + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
2549 + engines: {node: '>=20'}
2550 +
2551 is-inside-container@1.0.0:
2552 resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
2553 engines: {node: '>=14.16'}
@@ -2723,16 +2590,16 @@ packages:
2590 isexe@2.0.0:
2591 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2592
2726 - isexe@3.1.5:
2727 - resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
2728 - engines: {node: '>=18'}
2593 + isexe@4.0.0:
2594 + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==}
2595 + engines: {node: '>=20'}
2596
2730 - jiti@2.6.1:
2731 - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
2597 + jiti@2.7.0:
2598 + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
2599 hasBin: true
2600
2734 - jose@6.2.2:
2735 - resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==}
2601 + jose@6.2.3:
2602 + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==}
2603
2604 js-md5@0.8.3:
2605 resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==}
@@ -2747,11 +2614,11 @@ packages:
2614 resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
2615 hasBin: true
2616
2750 - jscpd-sarif-reporter@4.0.7:
2751 - resolution: {integrity: sha512-Q/VlfTI/Nbjc8dZ/2pDVIf1aRi2bM2CTYujcAoeYr7brRnS4o5ZeW86W8q7MM7cQu40gezlNckl+E9wKFSMFiA==}
2617 + jscpd-sarif-reporter@4.2.4:
2618 + resolution: {integrity: sha512-JtX79kFSyAhqJh5TdLUcvtYJtJd1F8UW8b4Miaga+EIgUn2/nR0N2zWL9mH5cRXgbzLuQbbsw9kReUVIECApwQ==}
2619
2753 - jscpd@4.0.9:
2754 - resolution: {integrity: sha512-fp6Sh42W3mIPoQgZmgYmKDLQzEDnnX2vaGlTN4haILkB2vsi+ewcCHEtWR/2CR/QbsBvAvsNo8U5Sa+p9aHiGw==}
2620 + jscpd@4.2.4:
2621 + resolution: {integrity: sha512-PSo2U0G8OxULayGyQMv7T/0ZQ+c3PPltdMOz/57v9Xnmq5xSIhh4cnZ0oYZPKqejy10aFwAbMVxqAlo24+PQ3g==}
2622 hasBin: true
2623
2624 jsdoc-type-pratt-parser@7.1.1:
@@ -2762,8 +2629,8 @@ packages:
2629 resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
2630 engines: {node: '>=20.0.0'}
2631
2765 - jsdom@29.0.2:
2766 - resolution: {integrity: sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==}
2632 + jsdom@29.1.1:
2633 + resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==}
2634 engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
2635 peerDependencies:
2636 canvas: ^3.0.0
@@ -2782,9 +2649,9 @@ packages:
2649 json-parse-even-better-errors@2.3.1:
2650 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
2651
2785 - json-parse-even-better-errors@4.0.0:
2786 - resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==}
2787 - engines: {node: ^18.17.0 || >=20.5.0}
2652 + json-parse-even-better-errors@6.0.0:
2653 + resolution: {integrity: sha512-2/8adwnK1/+Fdjyts4r6wSpfANWw8zdNhU9U/Llk59c6O+DjSisPWPykwoL8gZmocP9Dy64S7oie2g+Mia123A==}
2654 + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
2655
2656 json-schema-traverse@0.4.1:
2657 resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -2801,14 +2668,14 @@ packages:
2668 resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==}
2669 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2670
2804 - jsonfile@6.2.0:
2805 - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
2671 + jsonfile@6.2.1:
2672 + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==}
2673
2674 jstransformer@1.0.0:
2675 resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==}
2676
2810 - katex@0.16.45:
2811 - resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==}
2677 + katex@0.16.47:
2678 + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
2679 hasBin: true
2680
2681 keyv@4.5.4:
@@ -2905,11 +2772,11 @@ packages:
2772 lines-and-columns@1.2.4:
2773 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2774
2908 - linkify-it@5.0.0:
2909 - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
2775 + linkify-it@5.0.1:
2776 + resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==}
2777
2911 - local-pkg@1.1.2:
2912 - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
2778 + local-pkg@1.2.1:
2779 + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==}
2780 engines: {node: '>=14'}
2781
2782 locate-path@6.0.0:
@@ -2928,8 +2795,8 @@ packages:
2795 longest-streak@3.1.0:
2796 resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
2797
2931 - lru-cache@11.3.5:
2932 - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
2798 + lru-cache@11.5.1:
2799 + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
2800 engines: {node: 20 || >=22}
2801
2802 lru-cache@5.1.1:
@@ -2946,8 +2813,8 @@ packages:
2813 magic-string@0.30.21:
2814 resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
2815
2949 - markdown-it@14.1.1:
2950 - resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
2816 + markdown-it@14.2.0:
2817 + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==}
2818 hasBin: true
2819
2820 markdown-table@2.0.0:
@@ -3152,8 +3019,8 @@ packages:
3019 mlly@1.8.2:
3020 resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
3021
3155 - module-replacements@2.11.0:
3156 - resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==}
3022 + module-replacements@3.0.0-beta.8:
3023 + resolution: {integrity: sha512-sc8TepP9elxoOBXEpxmhPzKKjTjbswHVcmsKGbgvm3k6jZlLu/WMV/Lfmga6IGMgHU/V3WtY2s6VEgM4nTElUQ==}
3024
3025 mrmime@2.0.1:
3026 resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
@@ -3175,13 +3042,13 @@ packages:
3042 peerDependencies:
3043 vue: ^3.0.0
3044
3178 - nanoid@3.3.11:
3179 - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
3045 + nanoid@3.3.12:
3046 + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
3047 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
3048 hasBin: true
3049
3183 - nanoid@5.1.9:
3184 - resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==}
3050 + nanoid@5.1.11:
3051 + resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==}
3052 engines: {node: ^18 || >=20}
3053 hasBin: true
3054
@@ -3198,20 +3065,21 @@ packages:
3065 node-fetch-native@1.6.7:
3066 resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
3067
3201 - node-releases@2.0.37:
3202 - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==}
3068 + node-releases@2.0.46:
3069 + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==}
3070 + engines: {node: '>=18'}
3071
3072 node-sarif-builder@3.4.0:
3073 resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==}
3074 engines: {node: '>=20'}
3075
3208 - npm-normalize-package-bin@4.0.0:
3209 - resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
3210 - engines: {node: ^18.17.0 || >=20.5.0}
3076 + npm-normalize-package-bin@6.0.0:
3077 + resolution: {integrity: sha512-tdt4aFn9QamlhdN3HV2D2ccpBwO5/fyjjbXUxYA6uBjyekMZcZvDq0aSj9t5Jo+tih6AYFnt/cuIRn9013e0Uw==}
3078 + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
3079
3212 - npm-run-all2@8.0.4:
3213 - resolution: {integrity: sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==}
3214 - engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'}
3080 + npm-run-all2@9.0.1:
3081 + resolution: {integrity: sha512-ZtK8WXZBUA9x0XD6nxYdFLe86FxpkCTq2LiQxzX0LeXQY/vyAigQZXjjj/xfTwgV4Yqe/vYNIq2W09lrHKTcuQ==}
3082 + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0, npm: '>= 10'}
3083 hasBin: true
3084
3085 npm-run-path@4.0.1:
@@ -3225,8 +3093,11 @@ packages:
3093 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
3094 engines: {node: '>=0.10.0'}
3095
3228 - object-deep-merge@2.0.0:
3229 - resolution: {integrity: sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==}
3096 + object-deep-merge@2.0.1:
3097 + resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==}
3098 +
3099 + obug@2.1.1:
3100 + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
3101
3102 ofetch@1.5.1:
3103 resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
@@ -3251,9 +3122,9 @@ packages:
3122 oniguruma-to-es@4.3.6:
3123 resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
3124
3254 - open@10.2.0:
3255 - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
3256 - engines: {node: '>=18'}
3125 + open@11.0.0:
3126 + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
3127 + engines: {node: '>=20'}
3128
3129 open@8.4.2:
3130 resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -3296,11 +3167,8 @@ packages:
3167 parse-statements@1.0.11:
3168 resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
3169
3299 - parse5@7.3.0:
3300 - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
3301 -
3302 - parse5@8.0.0:
3303 - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
3170 + parse5@8.0.1:
3171 + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==}
3172
3173 password-validator@5.3.0:
3174 resolution: {integrity: sha512-Q+bSEM5pjokZqzWGoQaoylkeWeH4+9uMYlVImiPD0EOJClQ2RPBhrJ5h0OjhMKtwOmu5rRcLaTZo5Gk9RBl0ig==}
@@ -3375,8 +3243,8 @@ packages:
3243 pkg-types@1.3.1:
3244 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
3245
3378 - pkg-types@2.3.0:
3379 - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
3246 + pkg-types@2.3.1:
3247 + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==}
3248
3249 please-upgrade-node@3.2.0:
3250 resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
@@ -3385,8 +3253,8 @@ packages:
3253 resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
3254 engines: {node: '>=4'}
3255
3388 - pnpm-workspace-yaml@1.6.0:
3389 - resolution: {integrity: sha512-uUy4dK3E11sp7nK+hnT7uAWfkBMe00KaUw8OG3NuNlYQoTk4sc9pcdIy1+XIP85v9Tvr02mK3JPaNNrP0QyRaw==}
3256 + pnpm-workspace-yaml@1.6.1:
3257 + resolution: {integrity: sha512-yTeZntGWi8m9WNuhoVsP0DpFc4sC1U0+rr/qR6Zi9n2g3sxXY+JfccjXjjruNz96tM8I09yaJUA86doRnNLkbg==}
3258
3259 popmotion@11.0.5:
3260 resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==}
@@ -3395,16 +3263,20 @@ packages:
3263 resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
3264 engines: {node: '>=4'}
3265
3398 - postcss@8.5.10:
3399 - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
3266 + postcss@8.5.15:
3267 + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
3268 engines: {node: ^10 || ^12 || >=14}
3269
3270 + powershell-utils@0.1.0:
3271 + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
3272 + engines: {node: '>=20'}
3273 +
3274 prelude-ls@1.2.1:
3275 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
3276 engines: {node: '>= 0.8.0'}
3277
3406 - prettier-plugin-tailwindcss@0.7.2:
3407 - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==}
3278 + prettier-plugin-tailwindcss@0.8.0:
3279 + resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==}
3280 engines: {node: '>=20.19'}
3281 peerDependencies:
3282 '@ianvs/prettier-plugin-sort-imports': '*'
@@ -3466,8 +3338,8 @@ packages:
3338 promise@7.3.1:
3339 resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
3340
3469 - property-information@7.1.0:
3470 - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
3341 + property-information@7.2.0:
3342 + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
3343
3344 proxy-from-env@2.1.0:
3345 resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
@@ -3532,18 +3404,14 @@ packages:
3404 rc9@3.0.1:
3405 resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
3406
3535 - read-package-json-fast@4.0.0:
3536 - resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==}
3537 - engines: {node: ^18.17.0 || >=20.5.0}
3407 + read-package-json-fast@6.0.0:
3408 + resolution: {integrity: sha512-PNaGjoCnw9DBA2Kl8D+8po957z778q/HOPuY2u3Bkw/JO3eC8MDx7jn/PgMtSgpcBbs+6UOjDbwReGpXmRvs0g==}
3409 + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
3410
3411 readdirp@3.6.0:
3412 resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
3413 engines: {node: '>=8.10.0'}
3414
3543 - readdirp@4.1.2:
3544 - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
3545 - engines: {node: '>= 14.18.0'}
3546 -
3415 readdirp@5.0.0:
3416 resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
3417 engines: {node: '>= 20.19.0'}
@@ -3577,9 +3445,6 @@ packages:
3445 resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
3446 engines: {node: '>=0.10'}
3447
3580 - reprism@0.0.11:
3581 - resolution: {integrity: sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==}
3582 -
3448 require-directory@2.1.1:
3449 resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
3450 engines: {node: '>=0.10.0'}
@@ -3626,12 +3491,17 @@ packages:
3491 rfdc@1.4.1:
3492 resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
3493
3494 + rolldown@1.0.1:
3495 + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==}
3496 + engines: {node: ^20.19.0 || >=22.12.0}
3497 + hasBin: true
3498 +
3499 rollup-plugin-visualizer@5.14.0:
3500 resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==}
3501 engines: {node: '>=18'}
3502 hasBin: true
3503 peerDependencies:
3634 - rolldown: 1.x
3504 + rolldown: 1.0.1
3505 rollup: 2.x || 3.x || 4.x
3506 peerDependenciesMeta:
3507 rolldown:
@@ -3639,11 +3509,6 @@ packages:
3509 rollup:
3510 optional: true
3511
3642 - rollup@4.60.2:
3643 - resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==}
3644 - engines: {node: '>=18.0.0', npm: '>=8.0.0'}
3645 - hasBin: true
3646 -
3512 run-applescript@7.1.0:
3513 resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
3514 engines: {node: '>=18'}
@@ -3651,9 +3516,9 @@ packages:
3516 run-parallel@1.2.0:
3517 resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
3518
3654 - sass@1.99.0:
3655 - resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==}
3656 - engines: {node: '>=14.0.0'}
3519 + sass@1.100.0:
3520 + resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==}
3521 + engines: {node: '>=20.19.0'}
3522 hasBin: true
3523
3524 sax@1.6.0:
@@ -3685,8 +3550,8 @@ packages:
3550 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
3551 hasBin: true
3552
3688 - semver@7.7.4:
3689 - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
3553 + semver@7.8.1:
3554 + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==}
3555 engines: {node: '>=10'}
3556 hasBin: true
3557
@@ -3698,12 +3563,12 @@ packages:
3563 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
3564 engines: {node: '>=8'}
3565
3701 - shell-quote@1.8.3:
3702 - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
3566 + shell-quote@1.8.4:
3567 + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==}
3568 engines: {node: '>= 0.4'}
3569
3705 - shiki@4.0.2:
3706 - resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==}
3570 + shiki@4.1.0:
3571 + resolution: {integrity: sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q==}
3572 engines: {node: '>=20'}
3573
3574 signal-exit@3.0.7:
@@ -3794,23 +3659,23 @@ packages:
3659 symbol-tree@3.2.4:
3660 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
3661
3797 - synckit@0.11.12:
3798 - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
3662 + synckit@0.11.13:
3663 + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==}
3664 engines: {node: ^14.18.0 || >=16.0.0}
3665
3666 tagged-tag@1.0.0:
3667 resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
3668 engines: {node: '>=20'}
3669
3805 - tailwindcss@4.2.2:
3806 - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==}
3670 + tailwindcss@4.3.0:
3671 + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==}
3672
3808 - tapable@2.3.2:
3809 - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==}
3673 + tapable@2.3.3:
3674 + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
3675 engines: {node: '>=6'}
3676
3812 - taze@19.11.0:
3813 - resolution: {integrity: sha512-BlfH8Z6JdoIsrUptnz4P4YuEqdYsa/bSNNDOMhTlsHZ7Bbg1/0NyYh6uPkoRREjrt/kVovV+HYdi1ilHxvChfw==}
3677 + taze@19.14.1:
3678 + resolution: {integrity: sha512-+wf/IqGReU68vBE/iJ7JCuV5QeD6zQBp9MI6YphN7bT2vf/YIHd0oVA4AJiX3uANI1hQY58MrVmDwLv0x/q3BA==}
3679 hasBin: true
3680
3681 thememirror@2.0.1:
@@ -3820,23 +3685,23 @@ packages:
3685 '@codemirror/state': ^6.0.0
3686 '@codemirror/view': ^6.0.0
3687
3823 - tinyexec@1.1.1:
3824 - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
3688 + tinyexec@1.2.4:
3689 + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
3690 engines: {node: '>=18'}
3691
3827 - tinyglobby@0.2.16:
3828 - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
3692 + tinyglobby@0.2.17:
3693 + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
3694 engines: {node: '>=12.0.0'}
3695
3831 - tldts-core@7.0.28:
3832 - resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==}
3696 + tldts-core@7.4.2:
3697 + resolution: {integrity: sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==}
3698
3834 - tldts@7.0.28:
3835 - resolution: {integrity: sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==}
3699 + tldts@7.4.2:
3700 + resolution: {integrity: sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==}
3701 hasBin: true
3702
3838 - tmp@0.2.5:
3839 - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
3703 + tmp@0.2.7:
3704 + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==}
3705 engines: {node: '>=14.14'}
3706
3707 to-regex-range@5.0.1:
@@ -3878,35 +3743,33 @@ packages:
3743 peerDependencies:
3744 typescript: '>=4.8.4'
3745
3881 - ts-declaration-location@1.0.7:
3882 - resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==}
3883 - peerDependencies:
3884 - typescript: '>=4.0.0'
3885 -
3746 tslib@2.3.0:
3747 resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
3748
3749 tslib@2.4.0:
3750 resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
3751
3752 + tslib@2.8.1:
3753 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
3754 +
3755 type-check@0.4.0:
3756 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3757 engines: {node: '>= 0.8.0'}
3758
3896 - type-fest@5.6.0:
3897 - resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
3759 + type-fest@5.7.0:
3760 + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==}
3761 engines: {node: '>=20'}
3762
3900 - typescript@5.9.3:
3901 - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
3763 + typescript@6.0.3:
3764 + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
3765 engines: {node: '>=14.17'}
3766 hasBin: true
3767
3768 uc.micro@2.1.0:
3769 resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
3770
3908 - ufo@1.6.3:
3909 - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
3771 + ufo@1.6.4:
3772 + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
3773
3774 unconfig-core@7.5.0:
3775 resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
@@ -3917,14 +3780,14 @@ packages:
3780 unctx@2.5.0:
3781 resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
3782
3920 - undici-types@7.19.2:
3921 - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
3783 + undici-types@7.24.6:
3784 + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
3785
3923 - undici-types@7.25.0:
3924 - resolution: {integrity: sha512-AXNgS1Byr27fTI+2bsPEkV9CxkT8H6xNyRI68b3TatlZo3RkzlqQBLL+w7SmGPVpokjHbcuNVQUWE7FRTg+LRA==}
3786 + undici-types@7.27.0:
3787 + resolution: {integrity: sha512-sqqlwW3zm+cE82GwKdGyn3pcze7LXlx/4jUgA0vtAf6Fa81KMrJqc3VfWmmeOTUIElW9IdPsLwMUIpiOZQgK3A==}
3788
3926 - undici@7.25.0:
3927 - resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
3789 + undici@7.27.0:
3790 + resolution: {integrity: sha512-+t2Z/GwkZQDtu00813aP66ygViGtPHKhhoFZpQKpKrE+9jIgES+Zw+mFNaDWOVRKiuJjuqKHzD3B1sfGg8+ZOQ==}
3791 engines: {node: '>=20.18.1'}
3792
3793 unist-util-is@6.0.1:
@@ -3997,34 +3860,34 @@ packages:
3860 engines: {node: ^18.19.0 || >=20.6.0}
3861 hasBin: true
3862
4000 - vite-dev-rpc@1.1.0:
4001 - resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
3863 + vite-dev-rpc@2.0.0:
3864 + resolution: {integrity: sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==}
3865 peerDependencies:
4003 - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0
3866 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0
3867
4005 - vite-hot-client@2.1.0:
4006 - resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==}
3868 + vite-hot-client@2.2.0:
3869 + resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==}
3870 peerDependencies:
4008 - vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
3871 + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0
3872
4010 - vite-plugin-inspect@11.3.3:
4011 - resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==}
3873 + vite-plugin-inspect@11.4.1:
3874 + resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==}
3875 engines: {node: '>=14'}
3876 peerDependencies:
3877 '@nuxt/kit': '*'
4015 - vite: ^6.0.0 || ^7.0.0-0
3878 + vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0
3879 peerDependenciesMeta:
3880 '@nuxt/kit':
3881 optional: true
3882
4020 - vite-plugin-vue-devtools@8.1.1:
4021 - resolution: {integrity: sha512-9qTpOmZ2vHpvlI9hdVXAQ1Ry4I8GcBArU7aPi0qfIaV7fQIXy0L1nb6X4mFY2Gw0dYshHuLbIl0Ulb572SCjsQ==}
3883 + vite-plugin-vue-devtools@8.1.2:
3884 + resolution: {integrity: sha512-gt5h1CNryR9Hy0tvhSbqY3j0F7aj0pGxBxWLa1lXSiZVkhdWDf0vbCOZyjh8ivFGE6FDHTGy3zkcZGlMZdVHig==}
3885 engines: {node: '>=v14.21.3'}
3886 peerDependencies:
3887 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
3888
4026 - vite-plugin-vue-inspector@5.4.0:
4027 - resolution: {integrity: sha512-Iq/024CydcE46FZqWPU4t4lw4uYOdLnFSO1RNxJVt2qY9zxIjmnkBqhHnYaReWM82kmNnaXs7OkfgRrV2GEjyw==}
3889 + vite-plugin-vue-inspector@6.0.0:
3890 + resolution: {integrity: sha512-OpyITJLgZNibxlrik1EmRtvXHDjLRxNPsWkGFTERZs2LgMEdG4W0WoFt5GIgp3a3jRou+eJR8U1zOBk/XQgEbw==}
3891 peerDependencies:
3892 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
3893
@@ -4033,15 +3896,16 @@ packages:
3896 peerDependencies:
3897 vue: '>=3.2.13'
3898
4036 - vite@7.3.2:
4037 - resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==}
3899 + vite@8.0.16:
3900 + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==}
3901 engines: {node: ^20.19.0 || >=22.12.0}
3902 hasBin: true
3903 peerDependencies:
3904 '@types/node': ^20.19.0 || >=22.12.0
3905 + '@vitejs/devtools': ^0.1.18
3906 + esbuild: ^0.27.0 || ^0.28.0
3907 jiti: '>=1.21.0'
3908 less: ^4.0.0
4044 - lightningcss: ^1.21.0
3909 sass: ^1.70.0
3910 sass-embedded: ^1.70.0
3911 stylus: '>=0.54.8'
@@ -4052,12 +3916,14 @@ packages:
3916 peerDependenciesMeta:
3917 '@types/node':
3918 optional: true
3919 + '@vitejs/devtools':
3920 + optional: true
3921 + esbuild:
3922 + optional: true
3923 jiti:
3924 optional: true
3925 less:
3926 optional: true
4059 - lightningcss:
4060 - optional: true
3927 sass:
3928 optional: true
3929 sass-embedded:
@@ -4091,6 +3957,12 @@ packages:
3957 peerDependencies:
3958 vue: ^3.0.0
3959
3960 + vue-echarts@8.0.1:
3961 + resolution: {integrity: sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==}
3962 + peerDependencies:
3963 + echarts: ^6.0.0
3964 + vue: ^3.3.0
3965 +
3966 vue-eslint-parser@10.4.0:
3967 resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
3968 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -4102,19 +3974,20 @@ packages:
3974 peerDependencies:
3975 vue: ^3.0.0
3976
4105 - vue-i18n@11.3.2:
4106 - resolution: {integrity: sha512-gmFrvM+iuf2AH4ygligw/pC7PRJ63AdRNE68E0GPlQ83Mzfyck6g6cRQC3KzkYXr+ZidR91wq+5YBmAMpkgE1A==}
4107 - engines: {node: '>= 16'}
3977 + vue-i18n@11.4.4:
3978 + resolution: {integrity: sha512-gIbXVSFQV4jcSJxfwdZ5zSZmZ+12CnX0K3vBkRSd6Zn+HSzCp+QwUgPwpD/uN0oKNKI9RzlUXPKVedEuMgNG0A==}
3979 + engines: {node: '>= 22'}
3980 peerDependencies:
3981 vue: ^3.0.0
3982
4111 - vue-router@5.0.4:
4112 - resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==}
3983 + vue-router@5.1.0:
3984 + resolution: {integrity: sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g==}
3985 peerDependencies:
3986 '@pinia/colada': '>=0.21.2'
4115 - '@vue/compiler-sfc': ^3.5.17
3987 + '@vue/compiler-sfc': ^3.5.34
3988 pinia: ^3.0.4
4117 - vue: ^3.5.0
3989 + vite: ^7.0.0 || ^8.0.0
3990 + vue: ^3.5.34
3991 peerDependenciesMeta:
3992 '@pinia/colada':
3993 optional: true
@@ -4122,27 +3995,23 @@ packages:
3995 optional: true
3996 pinia:
3997 optional: true
3998 + vite:
3999 + optional: true
4000
4126 - vue-tsc@3.2.7:
4127 - resolution: {integrity: sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==}
4001 + vue-tsc@3.3.3:
4002 + resolution: {integrity: sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ==}
4003 hasBin: true
4004 peerDependencies:
4005 typescript: '>=5.0.0'
4006
4132 - vue3-apexcharts@1.11.1:
4133 - resolution: {integrity: sha512-MbN3vg8bMG19wc0Lm1HkeQvODgLm56DgpIxtNUO0xpf/JCzYWVGE4jzXp2JISzy2s3Kul1yOxNQUYsLvKQ5L9g==}
4134 - peerDependencies:
4135 - apexcharts: '>=5.10.0'
4136 - vue: '>=3.0.0'
4137 -
4007 vue3-marquee@4.2.2:
4008 resolution: {integrity: sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==}
4009 engines: {node: '>=12'}
4010 peerDependencies:
4011 vue: ^3.2
4012
4144 - vue@3.5.32:
4145 - resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==}
4013 + vue@3.5.35:
4014 + resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==}
4015 peerDependencies:
4016 typescript: '*'
4017 peerDependenciesMeta:
@@ -4190,9 +4059,9 @@ packages:
4059 engines: {node: '>= 8'}
4060 hasBin: true
4061
4193 - which@5.0.0:
4194 - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
4195 - engines: {node: ^18.17.0 || >=20.5.0}
4062 + which@7.0.0:
4063 + resolution: {integrity: sha512-RancgH2dmbLdHl6LRhEqvklWMgl/Hdnun0Y90KhBOLkMefg8Qa7/Zel8Sm+8HEcP6DEjzsWzpkuBQEZok58isA==}
4064 + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
4065 hasBin: true
4066
4067 with@7.0.2:
@@ -4210,9 +4079,9 @@ packages:
4079 wrappy@1.0.2:
4080 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
4081
4213 - wsl-utils@0.1.0:
4214 - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
4215 - engines: {node: '>=18'}
4082 + wsl-utils@0.3.1:
4083 + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
4084 + engines: {node: '>=20'}
4085
4086 xml-name-validator@4.0.0:
4087 resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
@@ -4240,8 +4109,8 @@ packages:
4109 resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==}
4110 engines: {node: '>= 6'}
4111
4243 - yaml@2.8.3:
4244 - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
4112 + yaml@2.9.0:
4113 + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
4114 engines: {node: '>= 14.6'}
4115 hasBin: true
4116
@@ -4265,52 +4134,52 @@ packages:
4134 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
4135 engines: {node: '>=10'}
4136
4268 - zrender@6.0.0:
4269 - resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==}
4137 + zrender@6.1.0:
4138 + resolution: {integrity: sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==}
4139
4140 zwitch@2.0.4:
4141 resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
4142
4143 snapshots:
4144
4276 - '@antfu/eslint-config@8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
4145 + '@antfu/eslint-config@9.0.0(@typescript-eslint/rule-tester@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3))(@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
4146 dependencies:
4147 '@antfu/install-pkg': 1.1.0
4279 - '@clack/prompts': 1.2.0
4280 - '@e18e/eslint-plugin': 0.3.0(eslint@10.2.1(jiti@2.6.1))
4281 - '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.2.1(jiti@2.6.1))
4282 - '@eslint/markdown': 8.0.1
4283 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.1(jiti@2.6.1))
4284 - '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
4285 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
4286 - '@vitest/eslint-plugin': 1.6.16(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
4287 - ansis: 4.2.0
4148 + '@clack/prompts': 1.5.0
4149 + '@e18e/eslint-plugin': 0.4.1(eslint@10.4.1(jiti@2.7.0))
4150 + '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.4.1(jiti@2.7.0))
4151 + '@eslint/markdown': 8.0.2
4152 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.1(jiti@2.7.0))
4153 + '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
4154 + '@typescript-eslint/parser': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
4155 + '@vitest/eslint-plugin': 1.6.19(@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
4156 + ansis: 4.3.1
4157 cac: 7.0.0
4289 - eslint: 10.2.1(jiti@2.6.1)
4290 - eslint-config-flat-gitignore: 2.3.0(eslint@10.2.1(jiti@2.6.1))
4291 - eslint-flat-config-utils: 3.1.0
4292 - eslint-merge-processors: 2.0.0(eslint@10.2.1(jiti@2.6.1))
4293 - eslint-plugin-antfu: 3.2.2(eslint@10.2.1(jiti@2.6.1))
4294 - eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))
4295 - eslint-plugin-import-lite: 0.6.0(eslint@10.2.1(jiti@2.6.1))
4296 - eslint-plugin-jsdoc: 62.9.0(eslint@10.2.1(jiti@2.6.1))
4297 - eslint-plugin-jsonc: 3.1.2(eslint@10.2.1(jiti@2.6.1))
4298 - eslint-plugin-n: 17.24.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
4299 - eslint-plugin-no-only-tests: 3.3.0
4300 - eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
4301 - eslint-plugin-pnpm: 1.6.0(eslint@10.2.1(jiti@2.6.1))
4302 - eslint-plugin-regexp: 3.1.0(eslint@10.2.1(jiti@2.6.1))
4303 - eslint-plugin-toml: 1.3.1(eslint@10.2.1(jiti@2.6.1))
4304 - eslint-plugin-unicorn: 64.0.0(eslint@10.2.1(jiti@2.6.1))
4305 - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))
4306 - eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.1(jiti@2.6.1)))(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.1(jiti@2.6.1)))
4307 - eslint-plugin-yml: 3.3.1(eslint@10.2.1(jiti@2.6.1))
4308 - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))
4309 - globals: 17.5.0
4310 - local-pkg: 1.1.2
4158 + eslint: 10.4.1(jiti@2.7.0)
4159 + eslint-config-flat-gitignore: 2.3.0(eslint@10.4.1(jiti@2.7.0))
4160 + eslint-flat-config-utils: 3.2.0
4161 + eslint-merge-processors: 2.0.0(eslint@10.4.1(jiti@2.7.0))
4162 + eslint-plugin-antfu: 3.2.3(eslint@10.4.1(jiti@2.7.0))
4163 + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3))(@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))
4164 + eslint-plugin-import-lite: 0.6.0(eslint@10.4.1(jiti@2.7.0))
4165 + eslint-plugin-jsdoc: 62.9.0(eslint@10.4.1(jiti@2.7.0))
4166 + eslint-plugin-jsonc: 3.2.0(eslint@10.4.1(jiti@2.7.0))
4167 + eslint-plugin-n: 18.0.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
4168 + eslint-plugin-no-only-tests: 3.4.0
4169 + eslint-plugin-perfectionist: 5.9.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
4170 + eslint-plugin-pnpm: 1.6.1(eslint@10.4.1(jiti@2.7.0))
4171 + eslint-plugin-regexp: 3.1.0(eslint@10.4.1(jiti@2.7.0))
4172 + eslint-plugin-toml: 1.4.0(eslint@10.4.1(jiti@2.7.0))
4173 + eslint-plugin-unicorn: 64.0.0(eslint@10.4.1(jiti@2.7.0))
4174 + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))
4175 + eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.7.0)))(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.1(jiti@2.7.0)))
4176 + eslint-plugin-yml: 3.4.0(eslint@10.4.1(jiti@2.7.0))
4177 + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))
4178 + globals: 17.6.0
4179 + local-pkg: 1.2.1
4180 parse-gitignore: 2.0.0
4181 toml-eslint-parser: 1.0.3
4313 - vue-eslint-parser: 10.4.0(eslint@10.2.1(jiti@2.6.1))
4182 + vue-eslint-parser: 10.4.0(eslint@10.4.1(jiti@2.7.0))
4183 yaml-eslint-parser: 2.0.0
4184 transitivePeerDependencies:
4185 - '@eslint/json'
@@ -4320,26 +4189,27 @@ snapshots:
4189 - '@vue/compiler-sfc'
4190 - oxlint
4191 - supports-color
4192 + - ts-declaration-location
4193 - typescript
4194 - vitest
4195
4196 '@antfu/install-pkg@1.1.0':
4197 dependencies:
4198 package-manager-detector: 1.6.0
4329 - tinyexec: 1.1.1
4199 + tinyexec: 1.2.4
4200
4331 - '@antfu/ni@30.0.0':
4201 + '@antfu/ni@30.1.0':
4202 dependencies:
4203 fzf: 0.5.2
4204 package-manager-detector: 1.6.0
4335 - tinyexec: 1.1.1
4336 - tinyglobby: 0.2.16
4205 + tinyexec: 1.2.4
4206 + tinyglobby: 0.2.17
4207
4208 '@asamuzakjp/css-color@5.1.11':
4209 dependencies:
4210 '@asamuzakjp/generational-cache': 1.0.1
4341 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4342 - '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4211 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4212 + '@csstools/css-color-parser': 4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4213 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
4214 '@csstools/css-tokenizer': 4.0.0
4215
@@ -4355,25 +4225,25 @@ snapshots:
4225
4226 '@asamuzakjp/nwsapi@2.3.9': {}
4227
4358 - '@babel/code-frame@7.29.0':
4228 + '@babel/code-frame@7.29.7':
4229 dependencies:
4360 - '@babel/helper-validator-identifier': 7.28.5
4230 + '@babel/helper-validator-identifier': 7.29.7
4231 js-tokens: 4.0.0
4232 picocolors: 1.1.1
4233
4364 - '@babel/compat-data@7.29.0': {}
4234 + '@babel/compat-data@7.29.7': {}
4235
4366 - '@babel/core@7.29.0':
4236 + '@babel/core@7.29.7':
4237 dependencies:
4368 - '@babel/code-frame': 7.29.0
4369 - '@babel/generator': 7.29.1
4370 - '@babel/helper-compilation-targets': 7.28.6
4371 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
4372 - '@babel/helpers': 7.29.2
4373 - '@babel/parser': 7.29.2
4374 - '@babel/template': 7.28.6
4375 - '@babel/traverse': 7.29.0
4376 - '@babel/types': 7.29.0
4238 + '@babel/code-frame': 7.29.7
4239 + '@babel/generator': 7.29.7
4240 + '@babel/helper-compilation-targets': 7.29.7
4241 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
4242 + '@babel/helpers': 7.29.7
4243 + '@babel/parser': 7.29.7
4244 + '@babel/template': 7.29.7
4245 + '@babel/traverse': 7.29.7
4246 + '@babel/types': 7.29.7
4247 '@jridgewell/remapping': 2.3.5
4248 convert-source-map: 2.0.0
4249 debug: 4.4.3
@@ -4383,189 +4253,211 @@ snapshots:
4253 transitivePeerDependencies:
4254 - supports-color
4255
4386 - '@babel/generator@7.29.1':
4256 + '@babel/generator@7.29.7':
4257 + dependencies:
4258 + '@babel/parser': 7.29.7
4259 + '@babel/types': 7.29.7
4260 + '@jridgewell/gen-mapping': 0.3.13
4261 + '@jridgewell/trace-mapping': 0.3.31
4262 + jsesc: 3.1.0
4263 +
4264 + '@babel/generator@8.0.0-rc.6':
4265 dependencies:
4388 - '@babel/parser': 7.29.2
4389 - '@babel/types': 7.29.0
4266 + '@babel/parser': 8.0.0-rc.6
4267 + '@babel/types': 8.0.0-rc.6
4268 '@jridgewell/gen-mapping': 0.3.13
4269 '@jridgewell/trace-mapping': 0.3.31
4270 + '@types/jsesc': 2.5.1
4271 jsesc: 3.1.0
4272
4394 - '@babel/helper-annotate-as-pure@7.27.3':
4273 + '@babel/helper-annotate-as-pure@7.29.7':
4274 dependencies:
4396 - '@babel/types': 7.29.0
4275 + '@babel/types': 7.29.7
4276
4398 - '@babel/helper-compilation-targets@7.28.6':
4277 + '@babel/helper-compilation-targets@7.29.7':
4278 dependencies:
4400 - '@babel/compat-data': 7.29.0
4401 - '@babel/helper-validator-option': 7.27.1
4279 + '@babel/compat-data': 7.29.7
4280 + '@babel/helper-validator-option': 7.29.7
4281 browserslist: 4.28.2
4282 lru-cache: 5.1.1
4283 semver: 6.3.1
4284
4406 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
4285 + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)':
4286 dependencies:
4408 - '@babel/core': 7.29.0
4409 - '@babel/helper-annotate-as-pure': 7.27.3
4410 - '@babel/helper-member-expression-to-functions': 7.28.5
4411 - '@babel/helper-optimise-call-expression': 7.27.1
4412 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
4413 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
4414 - '@babel/traverse': 7.29.0
4287 + '@babel/core': 7.29.7
4288 + '@babel/helper-annotate-as-pure': 7.29.7
4289 + '@babel/helper-member-expression-to-functions': 7.29.7
4290 + '@babel/helper-optimise-call-expression': 7.29.7
4291 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7)
4292 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
4293 + '@babel/traverse': 7.29.7
4294 semver: 6.3.1
4295 transitivePeerDependencies:
4296 - supports-color
4297
4419 - '@babel/helper-globals@7.28.0': {}
4298 + '@babel/helper-globals@7.29.7': {}
4299
4421 - '@babel/helper-member-expression-to-functions@7.28.5':
4300 + '@babel/helper-member-expression-to-functions@7.29.7':
4301 dependencies:
4423 - '@babel/traverse': 7.29.0
4424 - '@babel/types': 7.29.0
4302 + '@babel/traverse': 7.29.7
4303 + '@babel/types': 7.29.7
4304 transitivePeerDependencies:
4305 - supports-color
4306
4428 - '@babel/helper-module-imports@7.28.6':
4307 + '@babel/helper-module-imports@7.29.7':
4308 dependencies:
4430 - '@babel/traverse': 7.29.0
4431 - '@babel/types': 7.29.0
4309 + '@babel/traverse': 7.29.7
4310 + '@babel/types': 7.29.7
4311 transitivePeerDependencies:
4312 - supports-color
4313
4435 - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
4314 + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
4315 dependencies:
4437 - '@babel/core': 7.29.0
4438 - '@babel/helper-module-imports': 7.28.6
4439 - '@babel/helper-validator-identifier': 7.28.5
4440 - '@babel/traverse': 7.29.0
4316 + '@babel/core': 7.29.7
4317 + '@babel/helper-module-imports': 7.29.7
4318 + '@babel/helper-validator-identifier': 7.29.7
4319 + '@babel/traverse': 7.29.7
4320 transitivePeerDependencies:
4321 - supports-color
4322
4444 - '@babel/helper-optimise-call-expression@7.27.1':
4323 + '@babel/helper-optimise-call-expression@7.29.7':
4324 dependencies:
4446 - '@babel/types': 7.29.0
4325 + '@babel/types': 7.29.7
4326
4448 - '@babel/helper-plugin-utils@7.28.6': {}
4327 + '@babel/helper-plugin-utils@7.29.7': {}
4328
4450 - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
4329 + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)':
4330 dependencies:
4452 - '@babel/core': 7.29.0
4453 - '@babel/helper-member-expression-to-functions': 7.28.5
4454 - '@babel/helper-optimise-call-expression': 7.27.1
4455 - '@babel/traverse': 7.29.0
4331 + '@babel/core': 7.29.7
4332 + '@babel/helper-member-expression-to-functions': 7.29.7
4333 + '@babel/helper-optimise-call-expression': 7.29.7
4334 + '@babel/traverse': 7.29.7
4335 transitivePeerDependencies:
4336 - supports-color
4337
4459 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
4338 + '@babel/helper-skip-transparent-expression-wrappers@7.29.7':
4339 dependencies:
4461 - '@babel/traverse': 7.29.0
4462 - '@babel/types': 7.29.0
4340 + '@babel/traverse': 7.29.7
4341 + '@babel/types': 7.29.7
4342 transitivePeerDependencies:
4343 - supports-color
4344
4466 - '@babel/helper-string-parser@7.27.1': {}
4345 + '@babel/helper-string-parser@7.29.7': {}
4346
4468 - '@babel/helper-validator-identifier@7.28.5': {}
4347 + '@babel/helper-string-parser@8.0.0-rc.6': {}
4348
4470 - '@babel/helper-validator-option@7.27.1': {}
4349 + '@babel/helper-validator-identifier@7.29.7': {}
4350
4472 - '@babel/helpers@7.29.2':
4351 + '@babel/helper-validator-identifier@8.0.0-rc.6': {}
4352 +
4353 + '@babel/helper-validator-option@7.29.7': {}
4354 +
4355 + '@babel/helpers@7.29.7':
4356 + dependencies:
4357 + '@babel/template': 7.29.7
4358 + '@babel/types': 7.29.7
4359 +
4360 + '@babel/parser@7.29.7':
4361 dependencies:
4474 - '@babel/template': 7.28.6
4475 - '@babel/types': 7.29.0
4362 + '@babel/types': 7.29.7
4363
4477 - '@babel/parser@7.29.2':
4364 + '@babel/parser@8.0.0-rc.6':
4365 dependencies:
4479 - '@babel/types': 7.29.0
4366 + '@babel/types': 8.0.0-rc.6
4367
4481 - '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)':
4368 + '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)':
4369 dependencies:
4483 - '@babel/core': 7.29.0
4484 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
4485 - '@babel/helper-plugin-utils': 7.28.6
4486 - '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0)
4370 + '@babel/core': 7.29.7
4371 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
4372 + '@babel/helper-plugin-utils': 7.29.7
4373 + '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7)
4374 transitivePeerDependencies:
4375 - supports-color
4376
4490 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)':
4377 + '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)':
4378 dependencies:
4492 - '@babel/core': 7.29.0
4493 - '@babel/helper-plugin-utils': 7.28.6
4379 + '@babel/core': 7.29.7
4380 + '@babel/helper-plugin-utils': 7.29.7
4381
4495 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)':
4382 + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)':
4383 dependencies:
4497 - '@babel/core': 7.29.0
4498 - '@babel/helper-plugin-utils': 7.28.6
4384 + '@babel/core': 7.29.7
4385 + '@babel/helper-plugin-utils': 7.29.7
4386
4500 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)':
4387 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)':
4388 dependencies:
4502 - '@babel/core': 7.29.0
4503 - '@babel/helper-plugin-utils': 7.28.6
4389 + '@babel/core': 7.29.7
4390 + '@babel/helper-plugin-utils': 7.29.7
4391
4505 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
4392 + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)':
4393 dependencies:
4507 - '@babel/core': 7.29.0
4508 - '@babel/helper-plugin-utils': 7.28.6
4394 + '@babel/core': 7.29.7
4395 + '@babel/helper-plugin-utils': 7.29.7
4396
4510 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
4397 + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)':
4398 dependencies:
4512 - '@babel/core': 7.29.0
4513 - '@babel/helper-plugin-utils': 7.28.6
4399 + '@babel/core': 7.29.7
4400 + '@babel/helper-plugin-utils': 7.29.7
4401
4515 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)':
4402 + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)':
4403 dependencies:
4517 - '@babel/core': 7.29.0
4518 - '@babel/helper-annotate-as-pure': 7.27.3
4519 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
4520 - '@babel/helper-plugin-utils': 7.28.6
4521 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
4522 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
4404 + '@babel/core': 7.29.7
4405 + '@babel/helper-annotate-as-pure': 7.29.7
4406 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
4407 + '@babel/helper-plugin-utils': 7.29.7
4408 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
4409 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
4410 transitivePeerDependencies:
4411 - supports-color
4412
4526 - '@babel/template@7.28.6':
4413 + '@babel/template@7.29.7':
4414 dependencies:
4528 - '@babel/code-frame': 7.29.0
4529 - '@babel/parser': 7.29.2
4530 - '@babel/types': 7.29.0
4415 + '@babel/code-frame': 7.29.7
4416 + '@babel/parser': 7.29.7
4417 + '@babel/types': 7.29.7
4418
4532 - '@babel/traverse@7.29.0':
4419 + '@babel/traverse@7.29.7':
4420 dependencies:
4534 - '@babel/code-frame': 7.29.0
4535 - '@babel/generator': 7.29.1
4536 - '@babel/helper-globals': 7.28.0
4537 - '@babel/parser': 7.29.2
4538 - '@babel/template': 7.28.6
4539 - '@babel/types': 7.29.0
4421 + '@babel/code-frame': 7.29.7
4422 + '@babel/generator': 7.29.7
4423 + '@babel/helper-globals': 7.29.7
4424 + '@babel/parser': 7.29.7
4425 + '@babel/template': 7.29.7
4426 + '@babel/types': 7.29.7
4427 debug: 4.4.3
4428 transitivePeerDependencies:
4429 - supports-color
4430
4544 - '@babel/types@7.29.0':
4431 + '@babel/types@7.29.7':
4432 + dependencies:
4433 + '@babel/helper-string-parser': 7.29.7
4434 + '@babel/helper-validator-identifier': 7.29.7
4435 +
4436 + '@babel/types@8.0.0-rc.6':
4437 dependencies:
4546 - '@babel/helper-string-parser': 7.27.1
4547 - '@babel/helper-validator-identifier': 7.28.5
4438 + '@babel/helper-string-parser': 8.0.0-rc.6
4439 + '@babel/helper-validator-identifier': 8.0.0-rc.6
4440
4441 '@bramus/specificity@2.4.2':
4442 dependencies:
4443 css-tree: 3.2.1
4444
4553 - '@clack/core@1.2.0':
4445 + '@clack/core@1.4.0':
4446 dependencies:
4555 - fast-wrap-ansi: 0.1.6
4447 + fast-wrap-ansi: 0.2.2
4448 sisteransi: 1.0.5
4449
4558 - '@clack/prompts@1.2.0':
4450 + '@clack/prompts@1.5.0':
4451 dependencies:
4560 - '@clack/core': 1.2.0
4561 - fast-string-width: 1.1.0
4562 - fast-wrap-ansi: 0.1.6
4452 + '@clack/core': 1.4.0
4453 + fast-string-width: 3.0.2
4454 + fast-wrap-ansi: 0.2.2
4455 sisteransi: 1.0.5
4456
4457 '@codemirror/language@6.12.3':
4458 dependencies:
4459 '@codemirror/state': 6.6.0
4568 - '@codemirror/view': 6.41.1
4460 + '@codemirror/view': 6.43.0
4461 '@lezer/common': 1.5.2
4462 '@lezer/highlight': 1.2.3
4463 '@lezer/lr': 1.4.10
@@ -4575,7 +4467,7 @@ snapshots:
4467 dependencies:
4468 '@marijn/find-cluster-break': 1.0.2
4469
4578 - '@codemirror/view@6.41.1':
4470 + '@codemirror/view@6.43.0':
4471 dependencies:
4472 '@codemirror/state': 6.6.0
4473 crelt: 1.0.6
@@ -4589,21 +4481,21 @@ snapshots:
4481 dependencies:
4482 css-render: 0.15.14
4483
4592 - '@css-render/vue3-ssr@0.15.14(vue@3.5.32(typescript@5.9.3))':
4484 + '@css-render/vue3-ssr@0.15.14(vue@3.5.35(typescript@6.0.3))':
4485 dependencies:
4594 - vue: 3.5.32(typescript@5.9.3)
4486 + vue: 3.5.35(typescript@6.0.3)
4487
4488 '@csstools/color-helpers@6.0.2': {}
4489
4598 - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
4490 + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
4491 dependencies:
4492 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
4493 '@csstools/css-tokenizer': 4.0.0
4494
4603 - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
4495 + '@csstools/css-color-parser@4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
4496 dependencies:
4497 '@csstools/color-helpers': 6.0.2
4606 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4498 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4499 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
4500 '@csstools/css-tokenizer': 4.0.0
4501
@@ -4611,134 +4503,74 @@ snapshots:
4503 dependencies:
4504 '@csstools/css-tokenizer': 4.0.0
4505
4614 - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)':
4506 + '@csstools/css-syntax-patches-for-csstree@1.1.4(css-tree@3.2.1)':
4507 optionalDependencies:
4508 css-tree: 3.2.1
4509
4510 '@csstools/css-tokenizer@4.0.0': {}
4511
4620 - '@e18e/eslint-plugin@0.3.0(eslint@10.2.1(jiti@2.6.1))':
4512 + '@e18e/eslint-plugin@0.4.1(eslint@10.4.1(jiti@2.7.0))':
4513 dependencies:
4622 - eslint-plugin-depend: 1.5.0(eslint@10.2.1(jiti@2.6.1))
4514 + empathic: 2.0.1
4515 + module-replacements: 3.0.0-beta.8
4516 + semver: 7.8.1
4517 optionalDependencies:
4624 - eslint: 10.2.1(jiti@2.6.1)
4518 + eslint: 10.4.1(jiti@2.7.0)
4519 +
4520 + '@emnapi/core@1.10.0':
4521 + dependencies:
4522 + '@emnapi/wasi-threads': 1.2.1
4523 + tslib: 2.8.1
4524 + optional: true
4525 +
4526 + '@emnapi/runtime@1.10.0':
4527 + dependencies:
4528 + tslib: 2.8.1
4529 + optional: true
4530 +
4531 + '@emnapi/wasi-threads@1.2.1':
4532 + dependencies:
4533 + tslib: 2.8.1
4534 + optional: true
4535
4536 '@emotion/hash@0.8.0': {}
4537
4538 '@es-joy/jsdoccomment@0.84.0':
4539 dependencies:
4630 - '@types/estree': 1.0.8
4631 - '@typescript-eslint/types': 8.58.2
4540 + '@types/estree': 1.0.9
4541 + '@typescript-eslint/types': 8.60.1
4542 comment-parser: 1.4.5
4543 esquery: 1.7.0
4544 jsdoc-type-pratt-parser: 7.1.1
4545
4546 '@es-joy/jsdoccomment@0.86.0':
4547 dependencies:
4638 - '@types/estree': 1.0.8
4639 - '@typescript-eslint/types': 8.58.2
4548 + '@types/estree': 1.0.9
4549 + '@typescript-eslint/types': 8.60.1
4550 comment-parser: 1.4.6
4551 esquery: 1.7.0
4552 jsdoc-type-pratt-parser: 7.2.0
4553
4554 '@es-joy/resolve.exports@1.2.0': {}
4555
4646 - '@esbuild/aix-ppc64@0.27.7':
4647 - optional: true
4648 -
4649 - '@esbuild/android-arm64@0.27.7':
4650 - optional: true
4651 -
4652 - '@esbuild/android-arm@0.27.7':
4653 - optional: true
4654 -
4655 - '@esbuild/android-x64@0.27.7':
4656 - optional: true
4657 -
4658 - '@esbuild/darwin-arm64@0.27.7':
4659 - optional: true
4660 -
4661 - '@esbuild/darwin-x64@0.27.7':
4662 - optional: true
4663 -
4664 - '@esbuild/freebsd-arm64@0.27.7':
4665 - optional: true
4666 -
4667 - '@esbuild/freebsd-x64@0.27.7':
4668 - optional: true
4669 -
4670 - '@esbuild/linux-arm64@0.27.7':
4671 - optional: true
4672 -
4673 - '@esbuild/linux-arm@0.27.7':
4674 - optional: true
4675 -
4676 - '@esbuild/linux-ia32@0.27.7':
4677 - optional: true
4678 -
4679 - '@esbuild/linux-loong64@0.27.7':
4680 - optional: true
4681 -
4682 - '@esbuild/linux-mips64el@0.27.7':
4683 - optional: true
4684 -
4685 - '@esbuild/linux-ppc64@0.27.7':
4686 - optional: true
4687 -
4688 - '@esbuild/linux-riscv64@0.27.7':
4689 - optional: true
4690 -
4691 - '@esbuild/linux-s390x@0.27.7':
4692 - optional: true
4693 -
4694 - '@esbuild/linux-x64@0.27.7':
4695 - optional: true
4696 -
4697 - '@esbuild/netbsd-arm64@0.27.7':
4698 - optional: true
4699 -
4700 - '@esbuild/netbsd-x64@0.27.7':
4701 - optional: true
4702 -
4703 - '@esbuild/openbsd-arm64@0.27.7':
4704 - optional: true
4705 -
4706 - '@esbuild/openbsd-x64@0.27.7':
4707 - optional: true
4708 -
4709 - '@esbuild/openharmony-arm64@0.27.7':
4710 - optional: true
4711 -
4712 - '@esbuild/sunos-x64@0.27.7':
4713 - optional: true
4714 -
4715 - '@esbuild/win32-arm64@0.27.7':
4716 - optional: true
4717 -
4718 - '@esbuild/win32-ia32@0.27.7':
4719 - optional: true
4720 -
4721 - '@esbuild/win32-x64@0.27.7':
4722 - optional: true
4723 -
4724 - '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.2.1(jiti@2.6.1))':
4556 + '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@10.4.1(jiti@2.7.0))':
4557 dependencies:
4558 escape-string-regexp: 4.0.0
4727 - eslint: 10.2.1(jiti@2.6.1)
4559 + eslint: 10.4.1(jiti@2.7.0)
4560 ignore: 7.0.5
4561
4730 - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))':
4562 + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.1(jiti@2.7.0))':
4563 dependencies:
4732 - eslint: 10.2.1(jiti@2.6.1)
4564 + eslint: 10.4.1(jiti@2.7.0)
4565 eslint-visitor-keys: 3.4.3
4566
4567 '@eslint-community/regexpp@4.12.2': {}
4568
4737 - '@eslint/compat@2.0.5(eslint@10.2.1(jiti@2.6.1))':
4569 + '@eslint/compat@2.1.0(eslint@10.4.1(jiti@2.7.0))':
4570 dependencies:
4571 '@eslint/core': 1.2.1
4572 optionalDependencies:
4741 - eslint: 10.2.1(jiti@2.6.1)
4573 + eslint: 10.4.1(jiti@2.7.0)
4574
4575 '@eslint/config-array@0.23.5':
4576 dependencies:
@@ -4752,14 +4584,18 @@ snapshots:
4584 dependencies:
4585 '@eslint/core': 1.2.1
4586
4587 + '@eslint/config-helpers@0.6.0':
4588 + dependencies:
4589 + '@eslint/core': 1.2.1
4590 +
4591 '@eslint/core@1.2.1':
4592 dependencies:
4593 '@types/json-schema': 7.0.15
4594
4759 - '@eslint/markdown@8.0.1':
4595 + '@eslint/markdown@8.0.2':
4596 dependencies:
4597 '@eslint/core': 1.2.1
4762 - '@eslint/plugin-kit': 0.6.1
4598 + '@eslint/plugin-kit': 0.7.2
4599 github-slugger: 2.0.0
4600 mdast-util-from-markdown: 2.0.3
4601 mdast-util-frontmatter: 2.0.1
@@ -4774,22 +4610,17 @@ snapshots:
4610
4611 '@eslint/object-schema@3.0.5': {}
4612
4777 - '@eslint/plugin-kit@0.6.1':
4613 + '@eslint/plugin-kit@0.7.2':
4614 dependencies:
4615 '@eslint/core': 1.2.1
4616 levn: 0.4.1
4617
4782 - '@eslint/plugin-kit@0.7.1':
4783 - dependencies:
4784 - '@eslint/core': 1.2.1
4785 - levn: 0.4.1
4618 + '@exodus/bytes@1.15.1': {}
4619
4787 - '@exodus/bytes@1.15.0': {}
4788 -
4789 - '@f3ve/vue-markdown-it@0.2.3(vue@3.5.32(typescript@5.9.3))':
4620 + '@f3ve/vue-markdown-it@0.2.3(vue@3.5.35(typescript@6.0.3))':
4621 dependencies:
4791 - markdown-it: 14.1.1
4792 - vue: 3.5.32(typescript@5.9.3)
4622 + markdown-it: 14.2.0
4623 + vue: 3.5.35(typescript@6.0.3)
4624
4625 '@fontsource/jetbrains-mono@5.2.8': {}
4626
@@ -4817,28 +4648,28 @@ snapshots:
4648
4649 '@iconify/types@2.0.0': {}
4650
4820 - '@iconify/vue@5.0.0(vue@3.5.32(typescript@5.9.3))':
4651 + '@iconify/vue@5.0.1(vue@3.5.35(typescript@6.0.3))':
4652 dependencies:
4653 '@iconify/types': 2.0.0
4823 - vue: 3.5.32(typescript@5.9.3)
4654 + vue: 3.5.35(typescript@6.0.3)
4655
4825 - '@intlify/core-base@11.3.2':
4656 + '@intlify/core-base@11.4.4':
4657 dependencies:
4827 - '@intlify/devtools-types': 11.3.2
4828 - '@intlify/message-compiler': 11.3.2
4829 - '@intlify/shared': 11.3.2
4658 + '@intlify/devtools-types': 11.4.4
4659 + '@intlify/message-compiler': 11.4.4
4660 + '@intlify/shared': 11.4.4
4661
4831 - '@intlify/devtools-types@11.3.2':
4662 + '@intlify/devtools-types@11.4.4':
4663 dependencies:
4833 - '@intlify/core-base': 11.3.2
4834 - '@intlify/shared': 11.3.2
4664 + '@intlify/core-base': 11.4.4
4665 + '@intlify/shared': 11.4.4
4666
4836 - '@intlify/message-compiler@11.3.2':
4667 + '@intlify/message-compiler@11.4.4':
4668 dependencies:
4838 - '@intlify/shared': 11.3.2
4669 + '@intlify/shared': 11.4.4
4670 source-map-js: 1.2.1
4671
4841 - '@intlify/shared@11.3.2': {}
4672 + '@intlify/shared@11.4.4': {}
4673
4674 '@jridgewell/gen-mapping@0.3.13':
4675 dependencies:
@@ -4859,39 +4690,38 @@ snapshots:
4690 '@jridgewell/resolve-uri': 3.1.2
4691 '@jridgewell/sourcemap-codec': 1.5.5
4692
4862 - '@jscpd/badge-reporter@4.0.5':
4693 + '@jscpd/badge-reporter@4.2.4':
4694 dependencies:
4864 - badgen: 3.2.3
4695 + badgen: 3.3.2
4696 colors: 1.4.0
4866 - fs-extra: 11.3.4
4697 + fs-extra: 11.3.5
4698
4868 - '@jscpd/core@4.0.5':
4699 + '@jscpd/core@4.2.4':
4700 dependencies:
4701 eventemitter3: 5.0.4
4702
4872 - '@jscpd/finder@4.0.5':
4703 + '@jscpd/finder@4.2.4':
4704 dependencies:
4874 - '@jscpd/core': 4.0.5
4875 - '@jscpd/tokenizer': 4.0.5
4705 + '@jscpd/core': 4.2.4
4706 + '@jscpd/tokenizer': 4.2.4
4707 blamer: 1.0.7
4708 bytes: 3.1.2
4709 cli-table3: 0.6.5
4710 colors: 1.4.0
4711 fast-glob: 3.3.3
4881 - fs-extra: 11.3.4
4712 + fs-extra: 11.3.5
4713 markdown-table: 2.0.0
4714 pug: 3.0.4
4715
4885 - '@jscpd/html-reporter@4.0.5':
4716 + '@jscpd/html-reporter@4.2.4':
4717 dependencies:
4718 colors: 1.4.0
4888 - fs-extra: 11.3.4
4719 + fs-extra: 11.3.5
4720 pug: 3.0.4
4721
4891 - '@jscpd/tokenizer@4.0.5':
4722 + '@jscpd/tokenizer@4.2.4':
4723 dependencies:
4893 - '@jscpd/core': 4.0.5
4894 - reprism: 0.0.11
4724 + '@jscpd/core': 4.2.4
4725 spark-md5: 3.0.2
4726
4727 '@juggle/resize-observer@3.4.0': {}
@@ -4908,6 +4738,13 @@ snapshots:
4738
4739 '@marijn/find-cluster-break@1.0.2': {}
4740
4741 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
4742 + dependencies:
4743 + '@emnapi/core': 1.10.0
4744 + '@emnapi/runtime': 1.10.0
4745 + '@tybys/wasm-util': 0.10.2
4746 + optional: true
4747 +
4748 '@nodelib/fs.scandir@2.1.5':
4749 dependencies:
4750 '@nodelib/fs.stat': 2.0.5
@@ -4920,7 +4757,7 @@ snapshots:
4757 '@nodelib/fs.scandir': 2.1.5
4758 fastq: 1.20.1
4759
4923 - '@nuxt/kit@3.21.2':
4760 + '@nuxt/kit@3.21.6':
4761 dependencies:
4762 c12: 3.3.4
4763 consola: 3.4.2
@@ -4929,18 +4766,18 @@ snapshots:
4766 errx: 0.1.0
4767 exsolve: 1.0.8
4768 ignore: 7.0.5
4932 - jiti: 2.6.1
4769 + jiti: 2.7.0
4770 klona: 2.0.6
4771 knitwork: 1.3.0
4772 mlly: 1.8.2
4773 ohash: 2.0.11
4774 pathe: 2.0.3
4938 - pkg-types: 2.3.0
4775 + pkg-types: 2.3.1
4776 rc9: 3.0.1
4777 scule: 1.3.0
4941 - semver: 7.7.4
4942 - tinyglobby: 0.2.16
4943 - ufo: 1.6.3
4778 + semver: 7.8.1
4779 + tinyglobby: 0.2.17
4780 + ufo: 1.6.4
4781 unctx: 2.5.0
4782 untyped: 2.0.0
4783 transitivePeerDependencies:
@@ -4949,6 +4786,8 @@ snapshots:
4786
4787 '@ota-meshi/ast-token-store@0.3.0': {}
4788
4789 + '@oxc-project/types@0.130.0': {}
4790 +
4791 '@parcel/watcher-android-arm64@2.5.6':
4792 optional: true
4793
@@ -5010,7 +4849,7 @@ snapshots:
4849 '@parcel/watcher-win32-x64': 2.5.6
4850 optional: true
4851
5013 - '@pkgr/core@0.2.9': {}
4852 + '@pkgr/core@0.3.6': {}
4853
4854 '@polka/url@1.0.0-next.29': {}
4855
@@ -5018,124 +4857,99 @@ snapshots:
4857 dependencies:
4858 quansync: 1.0.0
4859
5021 - '@rolldown/pluginutils@1.0.0-rc.13': {}
5022 -
5023 - '@rolldown/pluginutils@1.0.0-rc.16': {}
5024 -
5025 - '@rollup/rollup-android-arm-eabi@4.60.2':
4860 + '@rolldown/binding-android-arm64@1.0.1':
4861 optional: true
4862
5028 - '@rollup/rollup-android-arm64@4.60.2':
4863 + '@rolldown/binding-darwin-arm64@1.0.1':
4864 optional: true
4865
5031 - '@rollup/rollup-darwin-arm64@4.60.2':
4866 + '@rolldown/binding-darwin-x64@1.0.1':
4867 optional: true
4868
5034 - '@rollup/rollup-darwin-x64@4.60.2':
4869 + '@rolldown/binding-freebsd-x64@1.0.1':
4870 optional: true
4871
5037 - '@rollup/rollup-freebsd-arm64@4.60.2':
4872 + '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
4873 optional: true
4874
5040 - '@rollup/rollup-freebsd-x64@4.60.2':
4875 + '@rolldown/binding-linux-arm64-gnu@1.0.1':
4876 optional: true
4877
5043 - '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
4878 + '@rolldown/binding-linux-arm64-musl@1.0.1':
4879 optional: true
4880
5046 - '@rollup/rollup-linux-arm-musleabihf@4.60.2':
4881 + '@rolldown/binding-linux-ppc64-gnu@1.0.1':
4882 optional: true
4883
5049 - '@rollup/rollup-linux-arm64-gnu@4.60.2':
4884 + '@rolldown/binding-linux-s390x-gnu@1.0.1':
4885 optional: true
4886
5052 - '@rollup/rollup-linux-arm64-musl@4.60.2':
4887 + '@rolldown/binding-linux-x64-gnu@1.0.1':
4888 optional: true
4889
5055 - '@rollup/rollup-linux-loong64-gnu@4.60.2':
4890 + '@rolldown/binding-linux-x64-musl@1.0.1':
4891 optional: true
4892
5058 - '@rollup/rollup-linux-loong64-musl@4.60.2':
4893 + '@rolldown/binding-openharmony-arm64@1.0.1':
4894 optional: true
4895
5061 - '@rollup/rollup-linux-ppc64-gnu@4.60.2':
5062 - optional: true
5063 -
5064 - '@rollup/rollup-linux-ppc64-musl@4.60.2':
5065 - optional: true
5066 -
5067 - '@rollup/rollup-linux-riscv64-gnu@4.60.2':
5068 - optional: true
5069 -
5070 - '@rollup/rollup-linux-riscv64-musl@4.60.2':
5071 - optional: true
5072 -
5073 - '@rollup/rollup-linux-s390x-gnu@4.60.2':
5074 - optional: true
5075 -
5076 - '@rollup/rollup-linux-x64-gnu@4.60.2':
5077 - optional: true
5078 -
5079 - '@rollup/rollup-linux-x64-musl@4.60.2':
5080 - optional: true
5081 -
5082 - '@rollup/rollup-openbsd-x64@4.60.2':
5083 - optional: true
5084 -
5085 - '@rollup/rollup-openharmony-arm64@4.60.2':
4896 + '@rolldown/binding-wasm32-wasi@1.0.1':
4897 + dependencies:
4898 + '@emnapi/core': 1.10.0
4899 + '@emnapi/runtime': 1.10.0
4900 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
4901 optional: true
4902
5088 - '@rollup/rollup-win32-arm64-msvc@4.60.2':
4903 + '@rolldown/binding-win32-arm64-msvc@1.0.1':
4904 optional: true
4905
5091 - '@rollup/rollup-win32-ia32-msvc@4.60.2':
4906 + '@rolldown/binding-win32-x64-msvc@1.0.1':
4907 optional: true
4908
5094 - '@rollup/rollup-win32-x64-gnu@4.60.2':
5095 - optional: true
4909 + '@rolldown/pluginutils@1.0.1': {}
4910
5097 - '@rollup/rollup-win32-x64-msvc@4.60.2':
4911 + '@rollup/rollup-linux-x64-gnu@4.61.0':
4912 optional: true
4913
5100 - '@shikijs/core@4.0.2':
4914 + '@shikijs/core@4.1.0':
4915 dependencies:
5102 - '@shikijs/primitive': 4.0.2
5103 - '@shikijs/types': 4.0.2
4916 + '@shikijs/primitive': 4.1.0
4917 + '@shikijs/types': 4.1.0
4918 '@shikijs/vscode-textmate': 10.0.2
4919 '@types/hast': 3.0.4
4920 hast-util-to-html: 9.0.5
4921
5108 - '@shikijs/engine-javascript@4.0.2':
4922 + '@shikijs/engine-javascript@4.1.0':
4923 dependencies:
5110 - '@shikijs/types': 4.0.2
4924 + '@shikijs/types': 4.1.0
4925 '@shikijs/vscode-textmate': 10.0.2
4926 oniguruma-to-es: 4.3.6
4927
5114 - '@shikijs/engine-oniguruma@4.0.2':
4928 + '@shikijs/engine-oniguruma@4.1.0':
4929 dependencies:
5116 - '@shikijs/types': 4.0.2
4930 + '@shikijs/types': 4.1.0
4931 '@shikijs/vscode-textmate': 10.0.2
4932
5119 - '@shikijs/langs@4.0.2':
4933 + '@shikijs/langs@4.1.0':
4934 dependencies:
5121 - '@shikijs/types': 4.0.2
4935 + '@shikijs/types': 4.1.0
4936
5123 - '@shikijs/markdown-it@4.0.2':
4937 + '@shikijs/markdown-it@4.1.0':
4938 dependencies:
5125 - markdown-it: 14.1.1
5126 - shiki: 4.0.2
4939 + markdown-it: 14.2.0
4940 + shiki: 4.1.0
4941
5128 - '@shikijs/primitive@4.0.2':
4942 + '@shikijs/primitive@4.1.0':
4943 dependencies:
5130 - '@shikijs/types': 4.0.2
4944 + '@shikijs/types': 4.1.0
4945 '@shikijs/vscode-textmate': 10.0.2
4946 '@types/hast': 3.0.4
4947
5134 - '@shikijs/themes@4.0.2':
4948 + '@shikijs/themes@4.1.0':
4949 dependencies:
5136 - '@shikijs/types': 4.0.2
4950 + '@shikijs/types': 4.1.0
4951
5138 - '@shikijs/types@4.0.2':
4952 + '@shikijs/types@4.1.0':
4953 dependencies:
4954 '@shikijs/vscode-textmate': 10.0.2
4955 '@types/hast': 3.0.4
@@ -5144,86 +4958,91 @@ snapshots:
4958
4959 '@sindresorhus/base62@1.0.0': {}
4960
5147 - '@stylistic/eslint-plugin@5.10.0(eslint@10.2.1(jiti@2.6.1))':
4961 + '@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.7.0))':
4962 dependencies:
5149 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
5150 - '@typescript-eslint/types': 8.58.2
5151 - eslint: 10.2.1(jiti@2.6.1)
4963 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
4964 + '@typescript-eslint/types': 8.60.1
4965 + eslint: 10.4.1(jiti@2.7.0)
4966 eslint-visitor-keys: 4.2.1
4967 espree: 10.4.0
4968 estraverse: 5.3.0
4969 picomatch: 4.0.4
4970
5157 - '@tailwindcss/node@4.2.2':
4971 + '@tailwindcss/node@4.3.0':
4972 dependencies:
4973 '@jridgewell/remapping': 2.3.5
5160 - enhanced-resolve: 5.20.1
5161 - jiti: 2.6.1
4974 + enhanced-resolve: 5.22.1
4975 + jiti: 2.7.0
4976 lightningcss: 1.32.0
4977 magic-string: 0.30.21
4978 source-map-js: 1.2.1
5165 - tailwindcss: 4.2.2
4979 + tailwindcss: 4.3.0
4980
5167 - '@tailwindcss/oxide-android-arm64@4.2.2':
4981 + '@tailwindcss/oxide-android-arm64@4.3.0':
4982 optional: true
4983
5170 - '@tailwindcss/oxide-darwin-arm64@4.2.2':
4984 + '@tailwindcss/oxide-darwin-arm64@4.3.0':
4985 optional: true
4986
5173 - '@tailwindcss/oxide-darwin-x64@4.2.2':
4987 + '@tailwindcss/oxide-darwin-x64@4.3.0':
4988 optional: true
4989
5176 - '@tailwindcss/oxide-freebsd-x64@4.2.2':
4990 + '@tailwindcss/oxide-freebsd-x64@4.3.0':
4991 optional: true
4992
5179 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
4993 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0':
4994 optional: true
4995
5182 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
4996 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0':
4997 optional: true
4998
5185 - '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
4999 + '@tailwindcss/oxide-linux-arm64-musl@4.3.0':
5000 optional: true
5001
5188 - '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
5002 + '@tailwindcss/oxide-linux-x64-gnu@4.3.0':
5003 optional: true
5004
5191 - '@tailwindcss/oxide-linux-x64-musl@4.2.2':
5005 + '@tailwindcss/oxide-linux-x64-musl@4.3.0':
5006 optional: true
5007
5194 - '@tailwindcss/oxide-wasm32-wasi@4.2.2':
5008 + '@tailwindcss/oxide-wasm32-wasi@4.3.0':
5009 optional: true
5010
5197 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
5011 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0':
5012 optional: true
5013
5200 - '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
5014 + '@tailwindcss/oxide-win32-x64-msvc@4.3.0':
5015 optional: true
5016
5203 - '@tailwindcss/oxide@4.2.2':
5017 + '@tailwindcss/oxide@4.3.0':
5018 optionalDependencies:
5205 - '@tailwindcss/oxide-android-arm64': 4.2.2
5206 - '@tailwindcss/oxide-darwin-arm64': 4.2.2
5207 - '@tailwindcss/oxide-darwin-x64': 4.2.2
5208 - '@tailwindcss/oxide-freebsd-x64': 4.2.2
5209 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2
5210 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2
5211 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2
5212 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2
5213 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2
5214 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2
5215 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2
5216 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2
5217 -
5218 - '@tailwindcss/vite@4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))':
5219 - dependencies:
5220 - '@tailwindcss/node': 4.2.2
5221 - '@tailwindcss/oxide': 4.2.2
5222 - tailwindcss: 4.2.2
5223 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
5019 + '@tailwindcss/oxide-android-arm64': 4.3.0
5020 + '@tailwindcss/oxide-darwin-arm64': 4.3.0
5021 + '@tailwindcss/oxide-darwin-x64': 4.3.0
5022 + '@tailwindcss/oxide-freebsd-x64': 4.3.0
5023 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0
5024 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0
5025 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0
5026 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0
5027 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0
5028 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0
5029 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0
5030 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0
5031 +
5032 + '@tailwindcss/vite@4.3.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))':
5033 + dependencies:
5034 + '@tailwindcss/node': 4.3.0
5035 + '@tailwindcss/oxide': 4.3.0
5036 + tailwindcss: 4.3.0
5037 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
5038
5039 '@tsconfig/node20@20.1.9': {}
5040
5041 + '@tybys/wasm-util@0.10.2':
5042 + dependencies:
5043 + tslib: 2.8.1
5044 + optional: true
5045 +
5046 '@types/bytes@3.1.5': {}
5047
5048 '@types/debug@4.1.13':
@@ -5232,31 +5051,33 @@ snapshots:
5051
5052 '@types/esrecurse@4.3.1': {}
5053
5235 - '@types/estree@1.0.8': {}
5054 + '@types/estree@1.0.9': {}
5055
5056 '@types/file-saver@2.0.7': {}
5057
5058 '@types/fs-extra@11.0.4':
5059 dependencies:
5060 '@types/jsonfile': 6.1.4
5242 - '@types/node': 25.6.0
5061 + '@types/node': 25.9.1
5062
5063 '@types/hast@3.0.4':
5064 dependencies:
5065 '@types/unist': 3.0.3
5066
5248 - '@types/jsdom@28.0.1':
5067 + '@types/jsdom@28.0.3':
5068 dependencies:
5250 - '@types/node': 25.6.0
5069 + '@types/node': 25.9.1
5070 '@types/tough-cookie': 4.0.5
5252 - parse5: 7.3.0
5253 - undici-types: 7.25.0
5071 + parse5: 8.0.1
5072 + undici-types: 7.27.0
5073 +
5074 + '@types/jsesc@2.5.1': {}
5075
5076 '@types/json-schema@7.0.15': {}
5077
5078 '@types/jsonfile@6.1.4':
5079 dependencies:
5259 - '@types/node': 25.6.0
5080 + '@types/node': 25.9.1
5081
5082 '@types/katex@0.16.8': {}
5083
@@ -5283,9 +5104,9 @@ snapshots:
5104
5105 '@types/ms@2.1.0': {}
5106
5286 - '@types/node@25.6.0':
5107 + '@types/node@25.9.1':
5108 dependencies:
5288 - undici-types: 7.19.2
5109 + undici-types: 7.24.6
5110
5111 '@types/parse-json@4.0.2': {}
5112
@@ -5299,139 +5120,139 @@ snapshots:
5120
5121 '@types/web-bluetooth@0.0.21': {}
5122
5302 - '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5123 + '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5124 dependencies:
5125 '@eslint-community/regexpp': 4.12.2
5305 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5306 - '@typescript-eslint/scope-manager': 8.58.2
5307 - '@typescript-eslint/type-utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5308 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5309 - '@typescript-eslint/visitor-keys': 8.58.2
5310 - eslint: 10.2.1(jiti@2.6.1)
5126 + '@typescript-eslint/parser': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5127 + '@typescript-eslint/scope-manager': 8.60.1
5128 + '@typescript-eslint/type-utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5129 + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5130 + '@typescript-eslint/visitor-keys': 8.60.1
5131 + eslint: 10.4.1(jiti@2.7.0)
5132 ignore: 7.0.5
5133 natural-compare: 1.4.0
5313 - ts-api-utils: 2.5.0(typescript@5.9.3)
5314 - typescript: 5.9.3
5134 + ts-api-utils: 2.5.0(typescript@6.0.3)
5135 + typescript: 6.0.3
5136 transitivePeerDependencies:
5137 - supports-color
5138
5318 - '@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5139 + '@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5140 dependencies:
5320 - '@typescript-eslint/scope-manager': 8.58.2
5321 - '@typescript-eslint/types': 8.58.2
5322 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
5323 - '@typescript-eslint/visitor-keys': 8.58.2
5141 + '@typescript-eslint/scope-manager': 8.60.1
5142 + '@typescript-eslint/types': 8.60.1
5143 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3)
5144 + '@typescript-eslint/visitor-keys': 8.60.1
5145 debug: 4.4.3
5325 - eslint: 10.2.1(jiti@2.6.1)
5326 - typescript: 5.9.3
5146 + eslint: 10.4.1(jiti@2.7.0)
5147 + typescript: 6.0.3
5148 transitivePeerDependencies:
5149 - supports-color
5150
5330 - '@typescript-eslint/project-service@8.58.2(typescript@5.9.3)':
5151 + '@typescript-eslint/project-service@8.60.1(typescript@6.0.3)':
5152 dependencies:
5332 - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3)
5333 - '@typescript-eslint/types': 8.58.2
5153 + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3)
5154 + '@typescript-eslint/types': 8.60.1
5155 debug: 4.4.3
5335 - typescript: 5.9.3
5156 + typescript: 6.0.3
5157 transitivePeerDependencies:
5158 - supports-color
5159
5339 - '@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5160 + '@typescript-eslint/rule-tester@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5161 dependencies:
5341 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5342 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
5343 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5344 - ajv: 6.14.0
5345 - eslint: 10.2.1(jiti@2.6.1)
5162 + '@typescript-eslint/parser': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5163 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3)
5164 + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5165 + ajv: 6.15.0
5166 + eslint: 10.4.1(jiti@2.7.0)
5167 json-stable-stringify-without-jsonify: 1.0.1
5168 lodash.merge: 4.6.2
5348 - semver: 7.7.4
5169 + semver: 7.8.1
5170 + typescript: 6.0.3
5171 transitivePeerDependencies:
5172 - supports-color
5351 - - typescript
5173
5353 - '@typescript-eslint/scope-manager@8.58.2':
5174 + '@typescript-eslint/scope-manager@8.60.1':
5175 dependencies:
5355 - '@typescript-eslint/types': 8.58.2
5356 - '@typescript-eslint/visitor-keys': 8.58.2
5176 + '@typescript-eslint/types': 8.60.1
5177 + '@typescript-eslint/visitor-keys': 8.60.1
5178
5358 - '@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.9.3)':
5179 + '@typescript-eslint/tsconfig-utils@8.60.1(typescript@6.0.3)':
5180 dependencies:
5360 - typescript: 5.9.3
5181 + typescript: 6.0.3
5182
5362 - '@typescript-eslint/type-utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5183 + '@typescript-eslint/type-utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5184 dependencies:
5364 - '@typescript-eslint/types': 8.58.2
5365 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
5366 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5185 + '@typescript-eslint/types': 8.60.1
5186 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3)
5187 + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5188 debug: 4.4.3
5368 - eslint: 10.2.1(jiti@2.6.1)
5369 - ts-api-utils: 2.5.0(typescript@5.9.3)
5370 - typescript: 5.9.3
5189 + eslint: 10.4.1(jiti@2.7.0)
5190 + ts-api-utils: 2.5.0(typescript@6.0.3)
5191 + typescript: 6.0.3
5192 transitivePeerDependencies:
5193 - supports-color
5194
5374 - '@typescript-eslint/types@8.58.2': {}
5195 + '@typescript-eslint/types@8.60.1': {}
5196
5376 - '@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3)':
5197 + '@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3)':
5198 dependencies:
5378 - '@typescript-eslint/project-service': 8.58.2(typescript@5.9.3)
5379 - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3)
5380 - '@typescript-eslint/types': 8.58.2
5381 - '@typescript-eslint/visitor-keys': 8.58.2
5199 + '@typescript-eslint/project-service': 8.60.1(typescript@6.0.3)
5200 + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3)
5201 + '@typescript-eslint/types': 8.60.1
5202 + '@typescript-eslint/visitor-keys': 8.60.1
5203 debug: 4.4.3
5204 minimatch: 10.2.5
5384 - semver: 7.7.4
5385 - tinyglobby: 0.2.16
5386 - ts-api-utils: 2.5.0(typescript@5.9.3)
5387 - typescript: 5.9.3
5205 + semver: 7.8.1
5206 + tinyglobby: 0.2.17
5207 + ts-api-utils: 2.5.0(typescript@6.0.3)
5208 + typescript: 6.0.3
5209 transitivePeerDependencies:
5210 - supports-color
5211
5391 - '@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5212 + '@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5213 dependencies:
5393 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
5394 - '@typescript-eslint/scope-manager': 8.58.2
5395 - '@typescript-eslint/types': 8.58.2
5396 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
5397 - eslint: 10.2.1(jiti@2.6.1)
5398 - typescript: 5.9.3
5214 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
5215 + '@typescript-eslint/scope-manager': 8.60.1
5216 + '@typescript-eslint/types': 8.60.1
5217 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3)
5218 + eslint: 10.4.1(jiti@2.7.0)
5219 + typescript: 6.0.3
5220 transitivePeerDependencies:
5221 - supports-color
5222
5402 - '@typescript-eslint/visitor-keys@8.58.2':
5223 + '@typescript-eslint/visitor-keys@8.60.1':
5224 dependencies:
5404 - '@typescript-eslint/types': 8.58.2
5225 + '@typescript-eslint/types': 8.60.1
5226 eslint-visitor-keys: 5.0.1
5227
5407 - '@ungap/structured-clone@1.3.0': {}
5228 + '@ungap/structured-clone@1.3.1': {}
5229
5409 - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))':
5230 + '@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
5231 dependencies:
5411 - '@babel/core': 7.29.0
5412 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
5413 - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
5414 - '@rolldown/pluginutils': 1.0.0-rc.16
5415 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
5416 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
5417 - vue: 3.5.32(typescript@5.9.3)
5232 + '@babel/core': 7.29.7
5233 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
5234 + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
5235 + '@rolldown/pluginutils': 1.0.1
5236 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7)
5237 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
5238 + vue: 3.5.35(typescript@6.0.3)
5239 transitivePeerDependencies:
5240 - supports-color
5241
5421 - '@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))':
5242 + '@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
5243 dependencies:
5423 - '@rolldown/pluginutils': 1.0.0-rc.13
5424 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
5425 - vue: 3.5.32(typescript@5.9.3)
5244 + '@rolldown/pluginutils': 1.0.1
5245 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
5246 + vue: 3.5.35(typescript@6.0.3)
5247
5427 - '@vitest/eslint-plugin@1.6.16(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)':
5248 + '@vitest/eslint-plugin@1.6.19(@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
5249 dependencies:
5429 - '@typescript-eslint/scope-manager': 8.58.2
5430 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5431 - eslint: 10.2.1(jiti@2.6.1)
5250 + '@typescript-eslint/scope-manager': 8.60.1
5251 + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5252 + eslint: 10.4.1(jiti@2.7.0)
5253 optionalDependencies:
5433 - '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
5434 - typescript: 5.9.3
5254 + '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5255 + typescript: 6.0.3
5256 transitivePeerDependencies:
5257 - supports-color
5258
@@ -5447,103 +5268,103 @@ snapshots:
5268 path-browserify: 1.0.1
5269 vscode-uri: 3.1.0
5270
5450 - '@vue-macros/common@3.1.2(vue@3.5.32(typescript@5.9.3))':
5271 + '@vue-macros/common@3.1.2(vue@3.5.35(typescript@6.0.3))':
5272 dependencies:
5452 - '@vue/compiler-sfc': 3.5.32
5273 + '@vue/compiler-sfc': 3.5.35
5274 ast-kit: 2.2.0
5454 - local-pkg: 1.1.2
5275 + local-pkg: 1.2.1
5276 magic-string-ast: 1.0.3
5277 unplugin-utils: 0.3.1
5278 optionalDependencies:
5458 - vue: 3.5.32(typescript@5.9.3)
5279 + vue: 3.5.35(typescript@6.0.3)
5280
5281 '@vue/babel-helper-vue-transform-on@1.5.0': {}
5282
5283 '@vue/babel-helper-vue-transform-on@2.0.1': {}
5284
5464 - '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.0)':
5285 + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.7)':
5286 dependencies:
5466 - '@babel/helper-module-imports': 7.28.6
5467 - '@babel/helper-plugin-utils': 7.28.6
5468 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
5469 - '@babel/template': 7.28.6
5470 - '@babel/traverse': 7.29.0
5471 - '@babel/types': 7.29.0
5287 + '@babel/helper-module-imports': 7.29.7
5288 + '@babel/helper-plugin-utils': 7.29.7
5289 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
5290 + '@babel/template': 7.29.7
5291 + '@babel/traverse': 7.29.7
5292 + '@babel/types': 7.29.7
5293 '@vue/babel-helper-vue-transform-on': 1.5.0
5473 - '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.0)
5474 - '@vue/shared': 3.5.32
5294 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7)
5295 + '@vue/shared': 3.5.35
5296 optionalDependencies:
5476 - '@babel/core': 7.29.0
5297 + '@babel/core': 7.29.7
5298 transitivePeerDependencies:
5299 - supports-color
5300
5480 - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.0)':
5301 + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)':
5302 dependencies:
5482 - '@babel/helper-module-imports': 7.28.6
5483 - '@babel/helper-plugin-utils': 7.28.6
5484 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
5485 - '@babel/template': 7.28.6
5486 - '@babel/traverse': 7.29.0
5487 - '@babel/types': 7.29.0
5303 + '@babel/helper-module-imports': 7.29.7
5304 + '@babel/helper-plugin-utils': 7.29.7
5305 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
5306 + '@babel/template': 7.29.7
5307 + '@babel/traverse': 7.29.7
5308 + '@babel/types': 7.29.7
5309 '@vue/babel-helper-vue-transform-on': 2.0.1
5489 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
5490 - '@vue/shared': 3.5.32
5310 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7)
5311 + '@vue/shared': 3.5.35
5312 optionalDependencies:
5492 - '@babel/core': 7.29.0
5313 + '@babel/core': 7.29.7
5314 transitivePeerDependencies:
5315 - supports-color
5316
5496 - '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.0)':
5317 + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.7)':
5318 dependencies:
5498 - '@babel/code-frame': 7.29.0
5499 - '@babel/core': 7.29.0
5500 - '@babel/helper-module-imports': 7.28.6
5501 - '@babel/helper-plugin-utils': 7.28.6
5502 - '@babel/parser': 7.29.2
5503 - '@vue/compiler-sfc': 3.5.32
5319 + '@babel/code-frame': 7.29.7
5320 + '@babel/core': 7.29.7
5321 + '@babel/helper-module-imports': 7.29.7
5322 + '@babel/helper-plugin-utils': 7.29.7
5323 + '@babel/parser': 7.29.7
5324 + '@vue/compiler-sfc': 3.5.35
5325 transitivePeerDependencies:
5326 - supports-color
5327
5507 - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.0)':
5328 + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)':
5329 dependencies:
5509 - '@babel/code-frame': 7.29.0
5510 - '@babel/core': 7.29.0
5511 - '@babel/helper-module-imports': 7.28.6
5512 - '@babel/helper-plugin-utils': 7.28.6
5513 - '@babel/parser': 7.29.2
5514 - '@vue/compiler-sfc': 3.5.32
5330 + '@babel/code-frame': 7.29.7
5331 + '@babel/core': 7.29.7
5332 + '@babel/helper-module-imports': 7.29.7
5333 + '@babel/helper-plugin-utils': 7.29.7
5334 + '@babel/parser': 7.29.7
5335 + '@vue/compiler-sfc': 3.5.35
5336 transitivePeerDependencies:
5337 - supports-color
5338
5518 - '@vue/compiler-core@3.5.32':
5339 + '@vue/compiler-core@3.5.35':
5340 dependencies:
5520 - '@babel/parser': 7.29.2
5521 - '@vue/shared': 3.5.32
5341 + '@babel/parser': 7.29.7
5342 + '@vue/shared': 3.5.35
5343 entities: 7.0.1
5344 estree-walker: 2.0.2
5345 source-map-js: 1.2.1
5346
5526 - '@vue/compiler-dom@3.5.32':
5347 + '@vue/compiler-dom@3.5.35':
5348 dependencies:
5528 - '@vue/compiler-core': 3.5.32
5529 - '@vue/shared': 3.5.32
5349 + '@vue/compiler-core': 3.5.35
5350 + '@vue/shared': 3.5.35
5351
5531 - '@vue/compiler-sfc@3.5.32':
5352 + '@vue/compiler-sfc@3.5.35':
5353 dependencies:
5533 - '@babel/parser': 7.29.2
5534 - '@vue/compiler-core': 3.5.32
5535 - '@vue/compiler-dom': 3.5.32
5536 - '@vue/compiler-ssr': 3.5.32
5537 - '@vue/shared': 3.5.32
5354 + '@babel/parser': 7.29.7
5355 + '@vue/compiler-core': 3.5.35
5356 + '@vue/compiler-dom': 3.5.35
5357 + '@vue/compiler-ssr': 3.5.35
5358 + '@vue/shared': 3.5.35
5359 estree-walker: 2.0.2
5360 magic-string: 0.30.21
5540 - postcss: 8.5.10
5361 + postcss: 8.5.15
5362 source-map-js: 1.2.1
5363
5543 - '@vue/compiler-ssr@3.5.32':
5364 + '@vue/compiler-ssr@3.5.35':
5365 dependencies:
5545 - '@vue/compiler-dom': 3.5.32
5546 - '@vue/shared': 3.5.32
5366 + '@vue/compiler-dom': 3.5.35
5367 + '@vue/shared': 3.5.35
5368
5369 '@vue/devtools-api@6.6.4': {}
5370
@@ -5551,15 +5372,15 @@ snapshots:
5372 dependencies:
5373 '@vue/devtools-kit': 7.7.9
5374
5554 - '@vue/devtools-api@8.1.1':
5375 + '@vue/devtools-api@8.1.2':
5376 dependencies:
5556 - '@vue/devtools-kit': 8.1.1
5377 + '@vue/devtools-kit': 8.1.2
5378
5558 - '@vue/devtools-core@8.1.1(vue@3.5.32(typescript@5.9.3))':
5379 + '@vue/devtools-core@8.1.2(vue@3.5.35(typescript@6.0.3))':
5380 dependencies:
5560 - '@vue/devtools-kit': 8.1.1
5561 - '@vue/devtools-shared': 8.1.1
5562 - vue: 3.5.32(typescript@5.9.3)
5381 + '@vue/devtools-kit': 8.1.2
5382 + '@vue/devtools-shared': 8.1.2
5383 + vue: 3.5.35(typescript@6.0.3)
5384
5385 '@vue/devtools-kit@7.7.9':
5386 dependencies:
@@ -5571,9 +5392,9 @@ snapshots:
5392 speakingurl: 14.0.1
5393 superjson: 2.2.6
5394
5574 - '@vue/devtools-kit@8.1.1':
5395 + '@vue/devtools-kit@8.1.2':
5396 dependencies:
5576 - '@vue/devtools-shared': 8.1.1
5397 + '@vue/devtools-shared': 8.1.2
5398 birpc: 2.9.0
5399 hookable: 5.5.3
5400 perfect-debounce: 2.1.0
@@ -5582,86 +5403,86 @@ snapshots:
5403 dependencies:
5404 rfdc: 1.4.1
5405
5585 - '@vue/devtools-shared@8.1.1': {}
5406 + '@vue/devtools-shared@8.1.2': {}
5407
5587 - '@vue/language-core@3.2.7':
5408 + '@vue/language-core@3.3.3':
5409 dependencies:
5410 '@volar/language-core': 2.4.28
5590 - '@vue/compiler-dom': 3.5.32
5591 - '@vue/shared': 3.5.32
5592 - alien-signals: 3.1.2
5411 + '@vue/compiler-dom': 3.5.35
5412 + '@vue/shared': 3.5.35
5413 + alien-signals: 3.2.1
5414 muggle-string: 0.4.1
5415 path-browserify: 1.0.1
5416 picomatch: 4.0.4
5417
5597 - '@vue/reactivity@3.5.32':
5418 + '@vue/reactivity@3.5.35':
5419 dependencies:
5599 - '@vue/shared': 3.5.32
5420 + '@vue/shared': 3.5.35
5421
5601 - '@vue/runtime-core@3.5.32':
5422 + '@vue/runtime-core@3.5.35':
5423 dependencies:
5603 - '@vue/reactivity': 3.5.32
5604 - '@vue/shared': 3.5.32
5424 + '@vue/reactivity': 3.5.35
5425 + '@vue/shared': 3.5.35
5426
5606 - '@vue/runtime-dom@3.5.32':
5427 + '@vue/runtime-dom@3.5.35':
5428 dependencies:
5608 - '@vue/reactivity': 3.5.32
5609 - '@vue/runtime-core': 3.5.32
5610 - '@vue/shared': 3.5.32
5429 + '@vue/reactivity': 3.5.35
5430 + '@vue/runtime-core': 3.5.35
5431 + '@vue/shared': 3.5.35
5432 csstype: 3.2.3
5433
5613 - '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@5.9.3))':
5434 + '@vue/server-renderer@3.5.35(vue@3.5.35(typescript@6.0.3))':
5435 dependencies:
5615 - '@vue/compiler-ssr': 3.5.32
5616 - '@vue/shared': 3.5.32
5617 - vue: 3.5.32(typescript@5.9.3)
5436 + '@vue/compiler-ssr': 3.5.35
5437 + '@vue/shared': 3.5.35
5438 + vue: 3.5.35(typescript@6.0.3)
5439
5619 - '@vue/shared@3.5.32': {}
5440 + '@vue/shared@3.5.35': {}
5441
5621 - '@vue/tsconfig@0.9.1(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))':
5442 + '@vue/tsconfig@0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))':
5443 optionalDependencies:
5623 - typescript: 5.9.3
5624 - vue: 3.5.32(typescript@5.9.3)
5444 + typescript: 6.0.3
5445 + vue: 3.5.35(typescript@6.0.3)
5446
5626 - '@vueuse/core@13.9.0(vue@3.5.32(typescript@5.9.3))':
5447 + '@vueuse/core@13.9.0(vue@3.5.35(typescript@6.0.3))':
5448 dependencies:
5449 '@types/web-bluetooth': 0.0.21
5450 '@vueuse/metadata': 13.9.0
5630 - '@vueuse/shared': 13.9.0(vue@3.5.32(typescript@5.9.3))
5631 - vue: 3.5.32(typescript@5.9.3)
5451 + '@vueuse/shared': 13.9.0(vue@3.5.35(typescript@6.0.3))
5452 + vue: 3.5.35(typescript@6.0.3)
5453
5633 - '@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3))':
5454 + '@vueuse/core@14.3.0(vue@3.5.35(typescript@6.0.3))':
5455 dependencies:
5456 '@types/web-bluetooth': 0.0.21
5636 - '@vueuse/metadata': 14.2.1
5637 - '@vueuse/shared': 14.2.1(vue@3.5.32(typescript@5.9.3))
5638 - vue: 3.5.32(typescript@5.9.3)
5457 + '@vueuse/metadata': 14.3.0
5458 + '@vueuse/shared': 14.3.0(vue@3.5.35(typescript@6.0.3))
5459 + vue: 3.5.35(typescript@6.0.3)
5460
5461 '@vueuse/metadata@13.9.0': {}
5462
5642 - '@vueuse/metadata@14.2.1': {}
5463 + '@vueuse/metadata@14.3.0': {}
5464
5644 - '@vueuse/motion@3.0.3(vue@3.5.32(typescript@5.9.3))':
5465 + '@vueuse/motion@3.0.3(vue@3.5.35(typescript@6.0.3))':
5466 dependencies:
5646 - '@vueuse/core': 13.9.0(vue@3.5.32(typescript@5.9.3))
5647 - '@vueuse/shared': 13.9.0(vue@3.5.32(typescript@5.9.3))
5467 + '@vueuse/core': 13.9.0(vue@3.5.35(typescript@6.0.3))
5468 + '@vueuse/shared': 13.9.0(vue@3.5.35(typescript@6.0.3))
5469 defu: 6.1.7
5470 framesync: 6.1.2
5471 popmotion: 11.0.5
5472 style-value-types: 5.1.2
5652 - vue: 3.5.32(typescript@5.9.3)
5473 + vue: 3.5.35(typescript@6.0.3)
5474 optionalDependencies:
5654 - '@nuxt/kit': 3.21.2
5475 + '@nuxt/kit': 3.21.6
5476 transitivePeerDependencies:
5477 - magicast
5478
5658 - '@vueuse/shared@13.9.0(vue@3.5.32(typescript@5.9.3))':
5479 + '@vueuse/shared@13.9.0(vue@3.5.35(typescript@6.0.3))':
5480 dependencies:
5660 - vue: 3.5.32(typescript@5.9.3)
5481 + vue: 3.5.35(typescript@6.0.3)
5482
5662 - '@vueuse/shared@14.2.1(vue@3.5.32(typescript@5.9.3))':
5483 + '@vueuse/shared@14.3.0(vue@3.5.35(typescript@6.0.3))':
5484 dependencies:
5664 - vue: 3.5.32(typescript@5.9.3)
5485 + vue: 3.5.35(typescript@6.0.3)
5486
5487 acorn-jsx@5.3.2(acorn@8.16.0):
5488 dependencies:
@@ -5671,14 +5492,20 @@ snapshots:
5492
5493 acorn@8.16.0: {}
5494
5674 - ajv@6.14.0:
5495 + agent-base@6.0.2:
5496 + dependencies:
5497 + debug: 4.4.3
5498 + transitivePeerDependencies:
5499 + - supports-color
5500 +
5501 + ajv@6.15.0:
5502 dependencies:
5503 fast-deep-equal: 3.1.3
5504 fast-json-stable-stringify: 2.1.0
5505 json-schema-traverse: 0.4.1
5506 uri-js: 4.4.1
5507
5681 - alien-signals@3.1.2: {}
5508 + alien-signals@3.2.1: {}
5509
5510 ansi-regex@5.0.1: {}
5511
@@ -5688,9 +5515,7 @@ snapshots:
5515
5516 ansi-styles@6.2.3: {}
5517
5691 - ansis@4.2.0: {}
5692 -
5693 - apexcharts@5.10.6: {}
5518 + ansis@4.3.1: {}
5519
5520 are-docs-informative@0.0.2: {}
5521
@@ -5712,37 +5537,40 @@ snapshots:
5537
5538 ast-kit@2.2.0:
5539 dependencies:
5715 - '@babel/parser': 7.29.2
5540 + '@babel/parser': 7.29.7
5541 pathe: 2.0.3
5542
5718 - ast-walker-scope@0.8.3:
5543 + ast-walker-scope@0.9.0:
5544 dependencies:
5720 - '@babel/parser': 7.29.2
5545 + '@babel/parser': 7.29.7
5546 + '@babel/types': 7.29.7
5547 ast-kit: 2.2.0
5548
5549 async-validator@4.2.5: {}
5550
5551 asynckit@0.4.0: {}
5552
5727 - axios@1.15.1:
5553 + axios@1.16.1:
5554 dependencies:
5555 follow-redirects: 1.16.0
5556 form-data: 4.0.5
5557 + https-proxy-agent: 5.0.1
5558 proxy-from-env: 2.1.0
5559 transitivePeerDependencies:
5560 - debug
5561 + - supports-color
5562
5563 babel-walk@3.0.0-canary-5:
5564 dependencies:
5737 - '@babel/types': 7.29.0
5565 + '@babel/types': 7.29.7
5566
5739 - badgen@3.2.3: {}
5567 + badgen@3.3.2: {}
5568
5569 balanced-match@1.0.2: {}
5570
5571 balanced-match@4.0.4: {}
5572
5745 - baseline-browser-mapping@2.10.20: {}
5573 + baseline-browser-mapping@2.10.33: {}
5574
5575 bidi-js@1.0.3:
5576 dependencies:
@@ -5750,6 +5578,8 @@ snapshots:
5578
5579 birpc@2.9.0: {}
5580
5581 + birpc@4.0.0: {}
5582 +
5583 blamer@1.0.7:
5584 dependencies:
5585 execa: 4.1.0
@@ -5757,16 +5587,16 @@ snapshots:
5587
5588 boolbase@1.0.0: {}
5589
5760 - brace-expansion@1.1.14:
5590 + brace-expansion@1.1.15:
5591 dependencies:
5592 balanced-match: 1.0.2
5593 concat-map: 0.0.1
5594
5765 - brace-expansion@2.1.0:
5595 + brace-expansion@2.1.1:
5596 dependencies:
5597 balanced-match: 1.0.2
5598
5769 - brace-expansion@5.0.5:
5599 + brace-expansion@5.0.6:
5600 dependencies:
5601 balanced-match: 4.0.4
5602
@@ -5776,13 +5606,13 @@ snapshots:
5606
5607 browserslist@4.28.2:
5608 dependencies:
5779 - baseline-browser-mapping: 2.10.20
5780 - caniuse-lite: 1.0.30001788
5781 - electron-to-chromium: 1.5.340
5782 - node-releases: 2.0.37
5609 + baseline-browser-mapping: 2.10.33
5610 + caniuse-lite: 1.0.30001793
5611 + electron-to-chromium: 1.5.364
5612 + node-releases: 2.0.46
5613 update-browserslist-db: 1.2.3(browserslist@4.28.2)
5614
5785 - builtin-modules@5.1.0: {}
5615 + builtin-modules@5.2.0: {}
5616
5617 bundle-name@4.1.0:
5618 dependencies:
@@ -5798,11 +5628,11 @@ snapshots:
5628 dotenv: 17.4.2
5629 exsolve: 1.0.8
5630 giget: 3.2.0
5801 - jiti: 2.6.1
5631 + jiti: 2.7.0
5632 ohash: 2.0.11
5633 pathe: 2.0.3
5634 perfect-debounce: 2.1.0
5805 - pkg-types: 2.3.0
5635 + pkg-types: 2.3.1
5636 rc9: 3.0.1
5637 optional: true
5638
@@ -5826,7 +5656,7 @@ snapshots:
5656
5657 camelcase@6.3.0: {}
5658
5829 - caniuse-lite@1.0.30001788: {}
5659 + caniuse-lite@1.0.30001793: {}
5660
5661 ccount@2.0.1: {}
5662
@@ -5842,10 +5672,6 @@ snapshots:
5672 dependencies:
5673 is-regex: 1.2.1
5674
5845 - chokidar@4.0.3:
5846 - dependencies:
5847 - readdirp: 4.1.2
5848 -
5675 chokidar@5.0.0:
5676 dependencies:
5677 readdirp: 5.0.0
@@ -5907,6 +5733,8 @@ snapshots:
5733
5734 comment-parser@1.4.6: {}
5735
5736 + comment-parser@1.4.7: {}
5737 +
5738 concat-map@0.0.1: {}
5739
5740 confbox@0.1.8: {}
@@ -5918,8 +5746,8 @@ snapshots:
5746
5747 constantinople@4.0.1:
5748 dependencies:
5921 - '@babel/parser': 7.29.2
5922 - '@babel/types': 7.29.0
5749 + '@babel/parser': 7.29.7
5750 + '@babel/types': 7.29.7
5751
5752 convert-source-map@2.0.0: {}
5753
@@ -5996,13 +5824,13 @@ snapshots:
5824 transitivePeerDependencies:
5825 - '@noble/hashes'
5826
5999 - date-fns-tz@3.2.0(date-fns@4.1.0):
5827 + date-fns-tz@3.2.0(date-fns@4.4.0):
5828 dependencies:
6001 - date-fns: 4.1.0
5829 + date-fns: 4.4.0
5830
6003 - date-fns@4.1.0: {}
5831 + date-fns@4.4.0: {}
5832
6005 - dayjs@1.11.20: {}
5833 + dayjs@1.11.21: {}
5834
5835 debounce@1.2.1: {}
5836
@@ -6035,9 +5863,9 @@ snapshots:
5863
5864 depcheck@1.4.7:
5865 dependencies:
6038 - '@babel/parser': 7.29.2
6039 - '@babel/traverse': 7.29.0
6040 - '@vue/compiler-sfc': 3.5.32
5866 + '@babel/parser': 7.29.7
5867 + '@babel/traverse': 7.29.7
5868 + '@vue/compiler-sfc': 3.5.35
5869 callsite: 1.0.0
5870 camelcase: 6.3.0
5871 cosmiconfig: 7.1.0
@@ -6045,7 +5873,7 @@ snapshots:
5873 deps-regex: 0.2.0
5874 findup-sync: 5.0.0
5875 ignore: 5.3.2
6048 - is-core-module: 2.16.1
5876 + is-core-module: 2.16.2
5877 js-yaml: 3.14.2
5878 json5: 2.2.3
5879 lodash: 4.18.1
@@ -6056,7 +5884,7 @@ snapshots:
5884 require-package-name: 2.0.1
5885 resolve: 1.22.12
5886 resolve-from: 5.0.0
6059 - semver: 7.7.4
5887 + semver: 7.8.1
5888 yargs: 16.2.0
5889 transitivePeerDependencies:
5890 - supports-color
@@ -6110,32 +5938,32 @@ snapshots:
5938
5939 easy-bem@1.1.1: {}
5940
6113 - echarts@6.0.0:
5941 + echarts@6.1.0:
5942 dependencies:
5943 tslib: 2.3.0
6116 - zrender: 6.0.0
5944 + zrender: 6.1.0
5945
6118 - electron-to-chromium@1.5.340: {}
5946 + electron-to-chromium@1.5.364: {}
5947
5948 emoji-regex@8.0.0: {}
5949
6122 - empathic@2.0.0: {}
5950 + empathic@2.0.1: {}
5951
5952 end-of-stream@1.4.5:
5953 dependencies:
5954 once: 1.4.0
5955
6128 - enhanced-resolve@5.20.1:
5956 + enhanced-resolve@5.22.1:
5957 dependencies:
5958 graceful-fs: 4.2.11
6131 - tapable: 2.3.2
5959 + tapable: 2.3.3
5960
5961 entities@4.5.0: {}
5962
6135 - entities@6.0.1: {}
6136 -
5963 entities@7.0.1: {}
5964
5965 + entities@8.0.0: {}
5966 +
5967 error-ex@1.3.4:
5968 dependencies:
5969 is-arrayish: 0.2.1
@@ -6149,7 +5977,7 @@ snapshots:
5977
5978 es-errors@1.3.0: {}
5979
6152 - es-object-atoms@1.1.1:
5980 + es-object-atoms@1.1.2:
5981 dependencies:
5982 es-errors: 1.3.0
5983
@@ -6158,36 +5986,7 @@ snapshots:
5986 es-errors: 1.3.0
5987 get-intrinsic: 1.3.0
5988 has-tostringtag: 1.0.2
6161 - hasown: 2.0.3
6162 -
6163 - esbuild@0.27.7:
6164 - optionalDependencies:
6165 - '@esbuild/aix-ppc64': 0.27.7
6166 - '@esbuild/android-arm': 0.27.7
6167 - '@esbuild/android-arm64': 0.27.7
6168 - '@esbuild/android-x64': 0.27.7
6169 - '@esbuild/darwin-arm64': 0.27.7
6170 - '@esbuild/darwin-x64': 0.27.7
6171 - '@esbuild/freebsd-arm64': 0.27.7
6172 - '@esbuild/freebsd-x64': 0.27.7
6173 - '@esbuild/linux-arm': 0.27.7
6174 - '@esbuild/linux-arm64': 0.27.7
6175 - '@esbuild/linux-ia32': 0.27.7
6176 - '@esbuild/linux-loong64': 0.27.7
6177 - '@esbuild/linux-mips64el': 0.27.7
6178 - '@esbuild/linux-ppc64': 0.27.7
6179 - '@esbuild/linux-riscv64': 0.27.7
6180 - '@esbuild/linux-s390x': 0.27.7
6181 - '@esbuild/linux-x64': 0.27.7
6182 - '@esbuild/netbsd-arm64': 0.27.7
6183 - '@esbuild/netbsd-x64': 0.27.7
6184 - '@esbuild/openbsd-arm64': 0.27.7
6185 - '@esbuild/openbsd-x64': 0.27.7
6186 - '@esbuild/openharmony-arm64': 0.27.7
6187 - '@esbuild/sunos-x64': 0.27.7
6188 - '@esbuild/win32-arm64': 0.27.7
6189 - '@esbuild/win32-ia32': 0.27.7
6190 - '@esbuild/win32-x64': 0.27.7
5989 + hasown: 2.0.4
5990
5991 escalade@3.2.0: {}
5992
@@ -6197,62 +5996,55 @@ snapshots:
5996
5997 escape-string-regexp@5.0.0: {}
5998
6200 - eslint-compat-utils@0.5.1(eslint@10.2.1(jiti@2.6.1)):
5999 + eslint-compat-utils@0.5.1(eslint@10.4.1(jiti@2.7.0)):
6000 dependencies:
6202 - eslint: 10.2.1(jiti@2.6.1)
6203 - semver: 7.7.4
6001 + eslint: 10.4.1(jiti@2.7.0)
6002 + semver: 7.8.1
6003
6205 - eslint-config-flat-gitignore@2.3.0(eslint@10.2.1(jiti@2.6.1)):
6004 + eslint-config-flat-gitignore@2.3.0(eslint@10.4.1(jiti@2.7.0)):
6005 dependencies:
6207 - '@eslint/compat': 2.0.5(eslint@10.2.1(jiti@2.6.1))
6208 - eslint: 10.2.1(jiti@2.6.1)
6006 + '@eslint/compat': 2.1.0(eslint@10.4.1(jiti@2.7.0))
6007 + eslint: 10.4.1(jiti@2.7.0)
6008
6210 - eslint-flat-config-utils@3.1.0:
6009 + eslint-flat-config-utils@3.2.0:
6010 dependencies:
6011 '@eslint/config-helpers': 0.5.5
6012 pathe: 2.0.3
6013
6215 - eslint-json-compat-utils@0.2.3(eslint@10.2.1(jiti@2.6.1))(jsonc-eslint-parser@3.1.0):
6014 + eslint-json-compat-utils@0.2.3(eslint@10.4.1(jiti@2.7.0))(jsonc-eslint-parser@3.1.0):
6015 dependencies:
6217 - eslint: 10.2.1(jiti@2.6.1)
6016 + eslint: 10.4.1(jiti@2.7.0)
6017 esquery: 1.7.0
6018 jsonc-eslint-parser: 3.1.0
6019
6221 - eslint-merge-processors@2.0.0(eslint@10.2.1(jiti@2.6.1)):
6020 + eslint-merge-processors@2.0.0(eslint@10.4.1(jiti@2.7.0)):
6021 dependencies:
6223 - eslint: 10.2.1(jiti@2.6.1)
6022 + eslint: 10.4.1(jiti@2.7.0)
6023
6225 - eslint-plugin-antfu@3.2.2(eslint@10.2.1(jiti@2.6.1)):
6024 + eslint-plugin-antfu@3.2.3(eslint@10.4.1(jiti@2.7.0)):
6025 dependencies:
6227 - eslint: 10.2.1(jiti@2.6.1)
6026 + eslint: 10.4.1(jiti@2.7.0)
6027
6229 - eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1)):
6028 + eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3))(@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0)):
6029 dependencies:
6030 '@es-joy/jsdoccomment': 0.84.0
6232 - '@typescript-eslint/rule-tester': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
6233 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
6234 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)
6235 - eslint: 10.2.1(jiti@2.6.1)
6031 + '@typescript-eslint/rule-tester': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6032 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3)
6033 + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6034 + eslint: 10.4.1(jiti@2.7.0)
6035
6237 - eslint-plugin-depend@1.5.0(eslint@10.2.1(jiti@2.6.1)):
6036 + eslint-plugin-es-x@7.8.0(eslint@10.4.1(jiti@2.7.0)):
6037 dependencies:
6239 - empathic: 2.0.0
6240 - eslint: 10.2.1(jiti@2.6.1)
6241 - module-replacements: 2.11.0
6242 - semver: 7.7.4
6243 -
6244 - eslint-plugin-es-x@7.8.0(eslint@10.2.1(jiti@2.6.1)):
6245 - dependencies:
6246 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
6038 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
6039 '@eslint-community/regexpp': 4.12.2
6248 - eslint: 10.2.1(jiti@2.6.1)
6249 - eslint-compat-utils: 0.5.1(eslint@10.2.1(jiti@2.6.1))
6040 + eslint: 10.4.1(jiti@2.7.0)

This file is too large to show in full.

customer-portal/pnpm-workspace.yaml new
+26
@@ -0,0 +1,26 @@
1 +minimumReleaseAge: 0
2 +shellEmulator: true
3 +
4 +trustPolicy: off
5 +
6 +trustPolicyExclude:
7 + - chokidar
8 + - semver
9 +
10 +allowBuilds:
11 + "@parcel/watcher": true
12 + "@tailwindcss/oxide": true
13 + esbuild: true
14 + unrs-resolver: true
15 +
16 +overrides:
17 + rolldown: 1.0.1
18 +
19 +onlyBuiltDependencies:
20 + - "@parcel/watcher"
21 + - "@tailwindcss/oxide"
22 + - esbuild
23 + - unrs-resolver
24 +peerDependencyRules:
25 + allowedVersions:
26 + eslint: "10"
customer-portal/src/api/endpoints/caseTemplates.ts
+1 -3
@@ -9,9 +9,7 @@ import { HttpClient } from "../httpClient"
9
10 export default {
11 getCaseTasks(caseId: number) {
12 - return HttpClient.get<CommonResponse<{ tasks: CaseTask[] }>>(
13 - `/incidents/db_operations/case/${caseId}/tasks`
14 - )
12 + return HttpClient.get<CommonResponse<{ tasks: CaseTask[] }>>(`/incidents/db_operations/case/${caseId}/tasks`)
13 },
14 getCaseTimeline(caseId: number, limit = 500, offset = 0) {
15 return HttpClient.get<CommonResponse<{ case_id: number; events: CaseEvent[] }>>(
customer-portal/src/api/endpoints/portal.ts
+12 -3
@@ -8,12 +8,21 @@ export default {
8 return HttpClient.get<CommonResponse<{ settings: PortalSettings }>>("/customer_portal/settings")
9 },
10 dashboardStats(customerCodes?: string[]) {
11 - return HttpClient.get<CommonResponse<DashboardStats>>("/customer_portal/dashboard/stats", withCustomerCodes(customerCodes))
11 + return HttpClient.get<CommonResponse<DashboardStats>>(
12 + "/customer_portal/dashboard/stats",
13 + withCustomerCodes(customerCodes)
14 + )
15 },
16 alertsStats(customerCodes?: string[]) {
14 - return HttpClient.get<CommonResponse<AlertsStats>>("/customer_portal/dashboard/alert-stats", withCustomerCodes(customerCodes))
17 + return HttpClient.get<CommonResponse<AlertsStats>>(
18 + "/customer_portal/dashboard/alert-stats",
19 + withCustomerCodes(customerCodes)
20 + )
21 },
22 casesStats(customerCodes?: string[]) {
17 - return HttpClient.get<CommonResponse<CasesStats>>("/customer_portal/dashboard/case-stats", withCustomerCodes(customerCodes))
23 + return HttpClient.get<CommonResponse<CasesStats>>(
24 + "/customer_portal/dashboard/case-stats",
25 + withCustomerCodes(customerCodes)
26 + )
27 }
28 }
customer-portal/src/api/index.ts
+1 -1
@@ -1,8 +1,8 @@
1 import agents from "./endpoints/agents"
2 import alerts from "./endpoints/alerts"
3 import auth from "./endpoints/auth"
4 -import caseTemplates from "./endpoints/caseTemplates"
4 import cases from "./endpoints/cases"
5 +import caseTemplates from "./endpoints/caseTemplates"
6 import portal from "./endpoints/portal"
7 import siem from "./endpoints/siem"
8
customer-portal/src/assets/scss/common.scss
+12
@@ -82,3 +82,15 @@
82 grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
83 grid-auto-flow: row dense;
84 }
85 +
86 +input:-webkit-autofill,
87 +input:-webkit-autofill:hover,
88 +input:-webkit-autofill:focus,
89 +textarea:-webkit-autofill,
90 +select:-webkit-autofill {
91 + -webkit-text-fill-color: var(--fg-default-color);
92 + transition: background-color 9999s ease-in-out 0s;
93 + -webkit-box-shadow: 0 0 0px 1000px var(--bg-default-color) inset;
94 + box-shadow: 0 0 0px 1000px var(--bg-default-color) inset;
95 + caret-color: var(--fg-default-color);
96 +}
customer-portal/src/assets/scss/overrides/naive-override.scss
+31 -41
@@ -20,23 +20,16 @@
20 }
21 }
22
23 -.n-drawer--right-placement {
24 - border-left: 1px solid var(--border-color);
25 - box-shadow: 0px 0px 20px 10px rgba(0, 0, 0, 0.4) !important;
26 -}
27 -
23 .n-drawer__resize-trigger {
24 &::before {
25 content: "::";
26 background-color: var(--bg-default-color);
32 - border: 1px solid var(--border-color);
33 - border-right: transparent;
27 width: 16px;
28 height: 26px;
29 display: flex;
30 position: absolute;
31 top: 50%;
39 - right: 2px;
32 + right: 0px;
33 text-align: center;
34 justify-content: center;
35 align-items: center;
@@ -52,7 +45,6 @@
45 &::before {
46 background-color: var(--primary-color);
47 color: var(--fg-tertiary-color);
55 - border-color: transparent;
48 }
49 }
50 }
@@ -113,45 +105,43 @@
105 }
106 }
107
116 -.n-form-item {
117 - .n-form-item-feedback-wrapper:not(:empty) {
118 - transform: translateY(-7px);
119 - padding-left: 0px !important;
120 - padding-right: 0px !important;
121 - padding-top: 0 !important;
122 - z-index: 1;
123 -
124 - .n-form-item-feedback {
125 - font-size: 13px;
126 - line-height: 1.2;
127 - padding: 3px 12px;
128 - border-bottom-left-radius: var(--border-radius);
129 - border-bottom-right-radius: var(--border-radius);
130 - background: color-mix(in srgb, currentColor 5%, var(--bg-default-color) 95%);
131 - border: 1px solid currentColor;
132 - border-top: 0;
108 +.n-spin-container {
109 + .n-spin-body {
110 + inset: 0 !important;
111 + transform: none !important;
112 + display: block;
113 +
114 + .n-base-loading {
115 + position: sticky;
116 + top: 50%;
117 + margin-top: min(50%, 100px);
118 + width: 100%;
119 + display: flex;
120 + justify-content: center;
121 + transform: translateY(-70px);
122 +
123 + .n-base-loading__transition-wrapper {
124 + width: 1em;
125 + height: 1em;
126 + }
127 }
134 - }
128
136 - &.n-form-item--small-size {
137 - .n-form-item-feedback-wrapper:not(:empty) {
138 - transform: translateY(-6px);
139 -
140 - .n-form-item-feedback {
141 - font-size: 11px;
142 - padding: 3px 10px;
143 - }
129 + .n-spin-description {
130 + position: sticky;
131 + top: calc(50% + 50px);
132 + left: 50%;
133 + transform: translateX(-50%) translateY(-40px);
134 + margin-top: 0;
135 }
136 }
137 +}
138
147 - &.n-form-item--small-large {
148 - .n-form-item-feedback-wrapper:not(:empty) {
149 - .n-form-item-feedback {
150 - padding: 3px 14px;
151 - }
139 +.n-form-item {
140 + .n-form-item-feedback-wrapper {
141 + .n-form-item-feedback {
142 + line-height: 1.1;
143 }
144 }
154 -
145 .n-form-item-blank--error {
146 .n-upload-dragger {
147 border-color: var(--n-feedback-text-color-error);
customer-portal/src/components/alerts/LinkAlert.vue
+1 -1
@@ -1,5 +1,5 @@
1 <template>
2 - <n-popover trigger="click" :show-arrow="false" to="body" @update:show="loadList">
2 + <n-popover trigger="click" :show-arrow="false" to="body" placement="left" @update:show="loadList">
3 <template #trigger>
4 <n-button :size :focusable="false" :loading="!!linkingCaseId || !!linkingAlertId" :secondary>
5 {{ label || "Link Alert" }}
customer-portal/src/components/alerts/List.vue
+8 -4
@@ -247,10 +247,14 @@ function handleStatusUpdateSuccess(payload: AlertStatusUpdateSuccessPayload) {
247 }
248 }
249
250 -watch([() => pagination.value.pageSize, () => filters.value.value, () => customerFilterStore.selectedCustomerCodes], resetPage, {
251 - deep: true,
252 - immediate: true
253 -})
250 +watch(
251 + [() => pagination.value.pageSize, () => filters.value.value, () => customerFilterStore.selectedCustomerCodes],
252 + resetPage,
253 + {
254 + deep: true,
255 + immediate: true
256 + }
257 +)
258
259 watch(() => pagination.value.page, loadAlerts, {
260 deep: true,
customer-portal/src/components/cases/List.vue
+18 -6
@@ -208,11 +208,19 @@ const loadCases = useDebounceFn(async () => {
208 )
209 break
210 default:
211 - response = await Api.cases.getCases(paginationPayload, abortController.signal, customerFilterStore.queryCustomerCodes)
211 + response = await Api.cases.getCases(
212 + paginationPayload,
213 + abortController.signal,
214 + customerFilterStore.queryCustomerCodes
215 + )
216 break
217 }
218 } else {
215 - response = await Api.cases.getCases(paginationPayload, abortController.signal, customerFilterStore.queryCustomerCodes)
219 + response = await Api.cases.getCases(
220 + paginationPayload,
221 + abortController.signal,
222 + customerFilterStore.queryCustomerCodes
223 + )
224 }
225
226 data.value = response.data.cases
@@ -269,10 +277,14 @@ function handleStatusUpdateSuccess(payload: CaseStatusUpdateSuccessPayload) {
277 }
278 }
279
272 -watch([() => pagination.value.pageSize, () => filters.value.value, () => customerFilterStore.selectedCustomerCodes], resetPage, {
273 - deep: true,
274 - immediate: true
275 -})
280 +watch(
281 + [() => pagination.value.pageSize, () => filters.value.value, () => customerFilterStore.selectedCustomerCodes],
282 + resetPage,
283 + {
284 + deep: true,
285 + immediate: true
286 + }
287 +)
288
289 watch(() => pagination.value.page, loadCases, {
290 deep: true,
customer-portal/src/components/common/charts/ChartBar.vue
+124 -102
@@ -1,16 +1,33 @@
1 <template>
2 - <div :style="{ height, width: '100%' }">
3 - <apexchart width="100%" :height :options="chartOptions" :series="chartSeries" />
4 - </div>
2 + <VChart
3 + ref="chartRef"
4 + class="w-full"
5 + :style="{ height, width: '100%' }"
6 + :autoresize="{ onResize: updatePlotSize }"
7 + :option="chartOption"
8 + @finished="updatePlotSize"
9 + @click="onChartClick"
10 + />
11 </template>
12
13 <script setup lang="ts">
8 -import type { ApexOptions } from "apexcharts"
9 -import { computed } from "vue"
10 -import apexchart from "vue3-apexcharts"
14 +import type { BarSeriesOption } from "echarts/charts"
15 +import type { GridComponentOption, TitleComponentOption, TooltipComponentOption } from "echarts/components"
16 +import type { ComposeOption, ECElementEvent } from "echarts/core"
17 +import { BarChart } from "echarts/charts"
18 +import { GridComponent, TitleComponent, TooltipComponent } from "echarts/components"
19 +import { use } from "echarts/core"
20 +import { CanvasRenderer } from "echarts/renderers"
21 +import { computed, ref } from "vue"
22 +import VChart from "vue-echarts"
23 import { useThemeStore } from "@/stores/theme"
12 -import { DASHBOARD_CHART_COLORS } from "./chartColors"
13 -import "@/assets/scss/overrides/apexchart-override.scss"
24 +import {
25 + buildChartTooltipGlassBase,
26 + CHART_COLORS,
27 + CHART_GRID_CONTAIN_AXIS_LABELS,
28 + chartTooltipThemeFromStyle,
29 + formatChartTooltipAxisFirst
30 +} from "."
31
32 const props = withDefaults(
33 defineProps<{
@@ -30,116 +47,121 @@ const emit = defineEmits<{
47 itemClick: [item: { name: string }]
48 }>()
49
50 +use([CanvasRenderer, BarChart, TitleComponent, TooltipComponent, GridComponent])
51 +
52 +type ChartOption = ComposeOption<TitleComponentOption | TooltipComponentOption | GridComponentOption | BarSeriesOption>
53 +
54 const themeStore = useThemeStore()
55 +const chartRef = ref<InstanceType<typeof VChart> | null>(null)
56 +const chartWidth = ref(0)
57
35 -const chartSeries = computed(() => [
36 - {
37 - name: "value",
38 - data: props.labels.map((_, i) => Number(props.data[i] ?? 0))
39 - }
40 -])
58 +function updatePlotSize() {
59 + chartWidth.value = chartRef.value?.getWidth() ?? 0
60 +}
61 +
62 +const yAxisLabelWidth = computed(() => (chartWidth.value === 0 || chartWidth.value >= 1080 ? 200 : 100))
63
42 -const chartOptions = computed<ApexOptions>(() => {
64 +const sortedRows = computed(() =>
65 + (props.labels || [])
66 + .map((label, i) => ({
67 + label,
68 + value: Number(props.data[i] ?? 0)
69 + }))
70 + .sort((a, b) => b.value - a.value)
71 +)
72 +
73 +const chartOption = computed((): ChartOption => {
74 const style = themeStore.style
75 const fg = style["fg-default-color"]
76 const bc = style["border-color"]
77 const ff = style["font-family"]
78 + const palette = props.monochrome ? [CHART_COLORS[0]] : CHART_COLORS
79 + const hasData = props.labels?.length > 0
80
48 - return {
49 - chart: {
50 - type: "bar",
51 - fontFamily: ff,
52 - toolbar: { show: false },
53 - animations: { enabled: true },
54 - events: {
55 - dataPointSelection(_event, _chartContext, config) {
56 - const idx = config?.dataPointIndex ?? 0
57 - const name = props.labels[idx]
58 - if (name) emit("itemClick", { name })
59 - }
81 + if (!hasData) {
82 + return {
83 + backgroundColor: "transparent",
84 + title: {
85 + text: "No data",
86 + left: "center",
87 + top: "center",
88 + textStyle: { color: fg, fontSize: 16, fontFamily: ff }
89 }
90 + }
91 + }
92 +
93 + const barData = sortedRows.value.map((row, i) => ({
94 + value: row.value,
95 + itemStyle: {
96 + color: palette[i % palette.length],
97 + borderRadius: [0, 4, 4, 0]
98 + }
99 + }))
100 +
101 + return {
102 + backgroundColor: "transparent",
103 + grid: {
104 + left: 8,
105 + right: 16,
106 + top: 8,
107 + bottom: 8,
108 + ...CHART_GRID_CONTAIN_AXIS_LABELS
109 },
62 - responsive: [
63 - {
64 - breakpoint: 1080,
65 - options: {
66 - yaxis: {
67 - labels: {
68 - style: { colors: fg, fontSize: "10px" },
69 - maxWidth: 100
70 - }
110 + tooltip: {
111 + ...buildChartTooltipGlassBase(chartTooltipThemeFromStyle(style), { trigger: "axis" }),
112 + axisPointer: { type: "shadow" },
113 + formatter: params =>
114 + formatChartTooltipAxisFirst(params, {
115 + resolveColor: p => {
116 + const idx = p.dataIndex ?? 0
117 + return palette[idx % palette.length]
118 }
72 - }
73 - }
74 - ],
75 - colors: props.monochrome ? [DASHBOARD_CHART_COLORS[0]] : DASHBOARD_CHART_COLORS,
76 - states: {
77 - active: {
78 - allowMultipleDataPointsSelection: false,
79 - filter: {
80 - type: "none"
81 - }
82 - }
119 + })
120 },
84 - plotOptions: {
85 - bar: {
86 - expandOnClick: false,
87 - horizontal: true,
88 - distributed: true,
89 - borderRadius: 4,
90 - barHeight: "60%",
91 - dataLabels: {
92 - position: "top"
93 - }
94 - }
95 - },
96 - dataLabels: {
97 - enabled: true,
98 - textAnchor: "start",
99 - offsetX: 5,
100 - style: {
101 - fontSize: "12px",
102 - colors: ["#fff"]
103 - }
121 + xAxis: {
122 + type: "value",
123 + axisLine: { show: false },
124 + axisTick: { show: false },
125 + axisLabel: { color: fg, fontSize: 10 },
126 + splitLine: { lineStyle: { color: bc } }
127 },
105 - stroke: { show: false },
106 - xaxis: {
107 - categories: [...props.labels],
108 - labels: {
109 - style: { colors: fg, fontSize: "10px" }
128 + yAxis: {
129 + type: "category",
130 + data: sortedRows.value.map(row => row.label),
131 + inverse: true,
132 + axisLine: { show: false },
133 + axisTick: { show: false },
134 + axisLabel: {
135 + color: fg,
136 + fontSize: 11,
137 + width: yAxisLabelWidth.value,
138 + overflow: "truncate"
139 },
111 - axisBorder: { show: false },
112 - axisTicks: { show: false }
113 - },
114 - yaxis: {
115 - labels: {
116 - style: { colors: fg, fontSize: "11px" },
117 - maxWidth: 200,
118 - trim: true
119 - }
140 + splitLine: { show: false }
141 },
121 - grid: {
122 - borderColor: bc,
123 - strokeDashArray: 0,
124 - xaxis: { lines: { show: true } },
125 - yaxis: { lines: { show: false } }
126 - },
127 - legend: { show: false },
128 - tooltip: {
129 - theme: themeStore.isThemeDark ? "dark" : "light",
130 - y: {
131 - formatter: (val: number) => String(val)
132 - }
133 - },
134 - noData: {
135 - text: "No data",
136 - align: "center",
137 - style: {
138 - color: fg,
139 - fontSize: "16px",
140 - fontFamily: ff
142 + series: [
143 + {
144 + name: "value",
145 + type: "bar",
146 + barWidth: "60%",
147 + data: barData,
148 + label: {
149 + show: true,
150 + position: "right",
151 + distance: 5,
152 + color: "#fff",
153 + fontSize: 12,
154 + formatter: params => String(params.value ?? 0)
155 + },
156 + emphasis: { focus: "series" }
157 }
142 - }
158 + ]
159 }
160 })
161 +
162 +function onChartClick(params: ECElementEvent) {
163 + if (params.componentType !== "series" || params.dataIndex == null) return
164 + const name = sortedRows.value[params.dataIndex]?.label
165 + if (name) emit("itemClick", { name })
166 +}
167 </script>
customer-portal/src/components/common/charts/ChartColumn.vue
+116 -121
@@ -1,18 +1,35 @@
1 <template>
2 - <div :style="{ height, width: '100%' }">
3 - <apexchart width="100%" :height :options="chartOptions" :series="chartSeries" />
4 - </div>
2 + <VChart
3 + ref="chartRef"
4 + class="w-full"
5 + :style="{ height, width: '100%' }"
6 + :autoresize="{ onResize: updatePlotWidth }"
7 + :option="chartOption"
8 + @finished="updatePlotWidth"
9 + @click="onChartClick"
10 + />
11 </template>
12
13 <script setup lang="ts">
8 -import type { ApexOptions } from "apexcharts"
9 -import { computed } from "vue"
10 -import apexchart from "vue3-apexcharts"
14 +import type { BarSeriesOption } from "echarts/charts"
15 +import type { GridComponentOption, TitleComponentOption, TooltipComponentOption } from "echarts/components"
16 +import type { ComposeOption } from "echarts/core"
17 +import { BarChart } from "echarts/charts"
18 +import { GridComponent, TitleComponent, TooltipComponent } from "echarts/components"
19 +import { use } from "echarts/core"
20 +import { CanvasRenderer } from "echarts/renderers"
21 +import { computed, ref } from "vue"
22 +import VChart from "vue-echarts"
23 import { useSettingsStore } from "@/stores/settings"
24 import { useThemeStore } from "@/stores/theme"
25 import dayjs from "@/utils/dayjs"
14 -import { DASHBOARD_CHART_COLORS } from "./chartColors"
15 -import "@/assets/scss/overrides/apexchart-override.scss"
26 +import {
27 + buildChartTooltipGlassBase,
28 + CHART_COLORS,
29 + CHART_GRID_CONTAIN_AXIS_LABELS,
30 + chartTooltipThemeFromStyle,
31 + formatChartTooltipAxisFirst
32 +} from "."
33
34 const props = withDefaults(
35 defineProps<{
@@ -33,136 +50,114 @@ const emit = defineEmits<{
50 itemClick: [item: { name: string }]
51 }>()
52
53 +use([CanvasRenderer, BarChart, TitleComponent, TooltipComponent, GridComponent])
54 +
55 +type ChartOption = ComposeOption<TitleComponentOption | TooltipComponentOption | GridComponentOption | BarSeriesOption>
56 +
57 +const GRID_HORIZONTAL_PADDING = 48
58 +
59 const themeStore = useThemeStore()
60 const dFormats = useSettingsStore().dateFormat
61 +const chartRef = ref<InstanceType<typeof VChart> | null>(null)
62 +const plotWidth = ref(0)
63
39 -const chartSeries = computed(() => [
40 - {
41 - name: "value",
42 - data: props.labels.map((_, i) => Number(props.data[i] ?? 0))
43 - }
44 -])
64 +function updatePlotWidth() {
65 + const chartWidth = chartRef.value?.getWidth() ?? 0
66 + plotWidth.value = Math.max(0, chartWidth - GRID_HORIZONTAL_PADDING)
67 +}
68
46 -const chartOptions = computed<ApexOptions>(() => {
69 +const categoryLabels = computed(() =>
70 + (props.labels || []).map(label =>
71 + props.labelsDatetime ? `${dayjs(label).format(dFormats.date)}\n${dayjs(label).format(dFormats.time)}` : label
72 + )
73 +)
74 +
75 +const showXAxisLabels = computed(() => plotWidth.value === 0 || plotWidth.value >= 500)
76 +
77 +const chartOption = computed((): ChartOption => {
78 const style = themeStore.style
79 const fg = style["fg-default-color"]
80 const bc = style["border-color"]
81 const ff = style["font-family"]
82 + const palette = props.monochrome ? [CHART_COLORS[0]] : CHART_COLORS
83 + const hasData = props.labels?.length > 0
84
52 - return {
53 - chart: {
54 - type: "bar",
55 - fontFamily: ff,
56 - toolbar: { show: false },
57 - animations: { enabled: true },
58 - events: {
59 - dataPointSelection(_event, _chartContext, config) {
60 - const idx = config?.dataPointIndex ?? 0
61 - const name = props.labels[idx]
62 - if (name) emit("itemClick", { name })
63 - }
85 + if (!hasData) {
86 + return {
87 + backgroundColor: "transparent",
88 + title: {
89 + text: "No data",
90 + left: "center",
91 + top: "center",
92 + textStyle: { color: fg, fontSize: 16, fontFamily: ff }
93 }
94 + }
95 + }
96 +
97 + const barData = (props.labels || []).map((_, i) => ({
98 + value: Number(props.data[i] ?? 0),
99 + itemStyle: {
100 + color: palette[i % palette.length],
101 + borderRadius: [4, 4, 0, 0]
102 + }
103 + }))
104 +
105 + return {
106 + backgroundColor: "transparent",
107 + grid: {
108 + left: 8,
109 + right: 8,
110 + top: 8,
111 + bottom: showXAxisLabels.value ? 56 : 16,
112 + ...CHART_GRID_CONTAIN_AXIS_LABELS
113 },
66 - responsive: [
67 - {
68 - breakpoint: 1100,
69 - options: {
70 - xaxis: {
71 - tickAmount: 10,
72 - labels: {
73 - show: true
74 - }
75 - }
76 - }
77 - },
78 - {
79 - breakpoint: 750,
80 - options: {
81 - xaxis: {
82 - tickAmount: 5,
83 - labels: {
84 - show: true
85 - }
86 - }
87 - }
88 - },
89 - {
90 - breakpoint: 500,
91 - options: {
92 - xaxis: {
93 - labels: {
94 - show: false
95 - }
114 + tooltip: {
115 + ...buildChartTooltipGlassBase(chartTooltipThemeFromStyle(style), { trigger: "axis" }),
116 + axisPointer: { type: "shadow" },
117 + formatter: params =>
118 + formatChartTooltipAxisFirst(params, {
119 + resolveColor: p => {
120 + const idx = p.dataIndex ?? 0
121 + return palette[idx % palette.length]
122 }
97 - }
98 - }
99 - ],
100 - colors: props.monochrome ? [DASHBOARD_CHART_COLORS[0]] : DASHBOARD_CHART_COLORS,
101 - states: {
102 - active: {
103 - allowMultipleDataPointsSelection: false,
104 - filter: {
105 - type: "none"
106 - }
107 - }
108 - },
109 - plotOptions: {
110 - bar: {
111 - expandOnClick: false,
112 - horizontal: false,
113 - distributed: true,
114 - borderRadius: 4,
115 - borderRadiusApplication: "end",
116 - columnWidth: "60%"
117 - }
118 - },
119 - dataLabels: { enabled: false },
120 - stroke: { show: false },
121 - xaxis: {
122 - categories: Array.from(props.labels, label => {
123 - return props.labelsDatetime
124 - ? [dayjs(label).format(dFormats.date), dayjs(label).format(dFormats.time)]
125 - : label
126 - }),
127 - tickAmount: 20,
128 - labels: {
129 - show: true,
130 - style: { colors: fg, fontSize: "11px" },
131 - rotate: -50,
132 - rotateAlways: true,
133 - hideOverlappingLabels: true,
134 - trim: false
135 - },
136 - axisBorder: { show: false },
137 - axisTicks: { show: false }
123 + })
124 },
139 - yaxis: {
140 - labels: {
141 - style: { colors: fg, fontSize: "10px" }
125 + xAxis: {
126 + type: "category",
127 + data: categoryLabels.value,
128 + axisLine: { show: false },
129 + axisTick: { show: false },
130 + axisLabel: {
131 + show: showXAxisLabels.value,
132 + color: fg,
133 + fontSize: 11,
134 + interval: "auto",
135 + hideOverlap: true
136 }
137 },
144 - grid: {
145 - borderColor: bc,
146 - strokeDashArray: 0,
147 - xaxis: { lines: { show: false } },
148 - yaxis: { lines: { show: true } }
149 - },
150 - legend: { show: false },
151 - tooltip: {
152 - theme: themeStore.isThemeDark ? "dark" : "light",
153 - y: {
154 - formatter: (val: number) => String(val)
155 - }
138 + yAxis: {
139 + type: "value",
140 + axisLine: { show: false },
141 + axisTick: { show: false },
142 + axisLabel: { color: fg, fontSize: 10 },
143 + splitLine: { lineStyle: { color: bc } }
144 },
157 - noData: {
158 - text: "No data",
159 - align: "center",
160 - style: {
161 - color: fg,
162 - fontSize: "16px",
163 - fontFamily: ff
145 + series: [
146 + {
147 + name: "value",
148 + type: "bar",
149 + barWidth: "60%",
150 + data: barData,
151 + emphasis: { focus: "series" }
152 }
165 - }
153 + ]
154 }
155 })
156 +
157 +function onChartClick(params: unknown) {
158 + const p = params as { componentType?: string; dataIndex?: number }
159 + if (p.componentType !== "series" || p.dataIndex == null) return
160 + const name = (props.labels || [])[p.dataIndex]
161 + if (name) emit("itemClick", { name })
162 +}
163 </script>
customer-portal/src/components/common/charts/ChartPie.vue
+115 -79
@@ -1,16 +1,19 @@
1 <template>
2 - <div :style="{ height, width: '100%' }">
3 - <apexchart width="100%" :height :options="chartOptions" :series="chartSeries" />
4 - </div>
2 + <VChart class="w-full" :style="{ height, width: '100%' }" autoresize :option="chartOption" @click="onChartClick" />
3 </template>
4
5 <script setup lang="ts">
8 -import type { ApexOptions } from "apexcharts"
6 +import type { PieSeriesOption } from "echarts/charts"
7 +import type { LegendComponentOption, TitleComponentOption, TooltipComponentOption } from "echarts/components"
8 +import type { ComposeOption, ECElementEvent } from "echarts/core"
9 +import { PieChart } from "echarts/charts"
10 +import { GraphicComponent, LegendComponent, TitleComponent, TooltipComponent } from "echarts/components"
11 +import { use } from "echarts/core"
12 +import { CanvasRenderer } from "echarts/renderers"
13 import { computed } from "vue"
10 -import apexchart from "vue3-apexcharts"
14 +import VChart from "vue-echarts"
15 import { useThemeStore } from "@/stores/theme"
12 -import { DASHBOARD_CHART_COLORS } from "./chartColors"
13 -import "@/assets/scss/overrides/apexchart-override.scss"
16 +import { buildChartTooltipGlassBase, CHART_COLORS, chartTooltipThemeFromStyle, formatChartTooltipPieItem } from "."
17
18 const props = withDefaults(
19 defineProps<{
@@ -30,94 +33,127 @@ const emit = defineEmits<{
33 itemClick: [item: { name: string }]
34 }>()
35
36 +use([CanvasRenderer, PieChart, LegendComponent, TooltipComponent, TitleComponent, GraphicComponent])
37 +
38 +type ChartOption = ComposeOption<
39 + TitleComponentOption | TooltipComponentOption | LegendComponentOption | PieSeriesOption
40 +>
41 +
42 const themeStore = useThemeStore()
43
35 -const chartSeries = computed<number[]>(() => {
36 - if (!props.labels.length) return []
37 - return props.labels.map((_, i) => Number(props.data[i] ?? 0))
38 -})
44 +const pieData = computed(() =>
45 + (props.labels || []).map((label, i) => ({
46 + name: label,
47 + value: Number(props.data[i] ?? 0)
48 + }))
49 +)
50
40 -const chartOptions = computed<ApexOptions>(() => {
51 +const totalValue = computed(() => pieData.value.reduce((sum, item) => sum + item.value, 0))
52 +
53 +const chartOption = computed((): ChartOption => {
54 const style = themeStore.style
55 const fg = style["fg-default-color"]
56 const ff = style["font-family"]
57 + const palette = props.monochrome ? [CHART_COLORS[0]] : [...CHART_COLORS]
58 + const hasData = props.labels?.length > 0
59
45 - return {
46 - chart: {
47 - type: "donut",
48 - fontFamily: ff,
49 - toolbar: { show: false },
50 - animations: { enabled: true },
51 - events: {
52 - dataPointSelection(_event, _chartContext, config) {
53 - const idx = config?.dataPointIndex ?? 0
54 - const name = props.labels[idx]
55 - if (name) emit("itemClick", { name })
56 - }
60 + if (!hasData) {
61 + return {
62 + backgroundColor: "transparent",
63 + title: {
64 + text: "No data",
65 + left: "center",
66 + top: "center",
67 + textStyle: { color: fg, fontSize: 16, fontFamily: ff }
68 }
58 - },
59 - labels: [...props.labels],
60 - colors: props.monochrome ? [DASHBOARD_CHART_COLORS[0]] : DASHBOARD_CHART_COLORS,
61 - states: {
62 - active: {
63 - allowMultipleDataPointsSelection: false,
64 - filter: {
65 - type: "none"
66 - }
67 - }
68 - },
69 - plotOptions: {
70 - pie: {
71 - expandOnClick: false,
72 - donut: {
73 - size: "55%",
74 - labels: {
75 - show: true,
76 - name: { fontFamily: ff, fontSize: "12px", offsetY: -2 },
77 - value: { color: fg, fontFamily: ff, fontSize: "12px", offsetY: 0 },
78 - total: { color: fg, fontFamily: ff, fontSize: "12px", offsetY: 2 }
69 + }
70 + }
71 +
72 + return {
73 + backgroundColor: "transparent",
74 + color: palette,
75 + tooltip: {
76 + ...buildChartTooltipGlassBase(chartTooltipThemeFromStyle(style)),
77 + formatter: params =>
78 + formatChartTooltipPieItem(params, {
79 + resolveColor: p => {
80 + const idx = p.dataIndex ?? 0
81 + return palette[idx % palette.length]
82 }
83 + })
84 + },
85 + graphic: [
86 + {
87 + type: "text",
88 + left: "center",
89 + top: "33%",
90 + style: {
91 + text: `Total\n\n${totalValue.value}`,
92 + fill: fg,
93 + fontSize: 14,
94 + fontFamily: ff,
95 + textAlign: "center",
96 + textVerticalAlign: "middle"
97 }
98 }
82 - },
83 - dataLabels: {
84 - enabled: true
85 - },
86 - stroke: {
87 - show: false
88 - },
99 + ],
100 legend: {
101 show: true,
91 - position: "right",
92 - fontSize: "11px",
93 - fontFamily: ff,
94 - labels: { colors: fg },
95 - itemMargin: { vertical: 6, horizontal: 4 },
96 - markers: {
97 - size: 7,
98 - strokeWidth: 0,
99 - offsetX: -5
100 - },
101 - formatter: (seriesName, opts) => {
102 - const series = opts?.w.globals.series as number[]
103 - const value = series[opts?.seriesIndex ?? 0] ?? 0
104 - const total = series.reduce((sum, v) => sum + v, 0)
105 - const pct = total > 0 ? (value / total) * 100 : 0
106 - return `${seriesName} - ${value} (${pct.toFixed(1)}%)`
102 + selectedMode: false,
103 + type: "scroll",
104 + orient: "horizontal",
105 + bottom: 4,
106 + left: "center",
107 + width: "92%",
108 + textStyle: { color: fg, fontSize: 11, fontFamily: ff },
109 + pageTextStyle: { color: fg },
110 + pageIconColor: fg,
111 + pageIconInactiveColor: style["fg-secondary-color"],
112 + itemWidth: 7,
113 + itemHeight: 7,
114 + itemGap: 16,
115 + formatter: (name: string) => {
116 + const item = pieData.value.find(d => d.name === name)
117 + const val = item?.value ?? 0
118 + const pct = totalValue.value > 0 ? (val / totalValue.value) * 100 : 0
119 + return `${name} - ${val} (${pct.toFixed(1)}%)`
120 }
121 },
109 - tooltip: {
110 - theme: themeStore.isThemeDark ? "dark" : "light"
111 - },
112 - noData: {
113 - text: "No data",
114 - align: "center",
115 - style: {
116 - color: fg,
117 - fontSize: "16px",
118 - fontFamily: ff
122 + series: [
123 + {
124 + name: "value",
125 + type: "pie",
126 + radius: ["40%", "55%"],
127 + center: ["50%", "40%"],
128 + avoidLabelOverlap: true,
129 + itemStyle: { borderWidth: 0 },
130 + label: {
131 + show: true,
132 + position: "outside",
133 + color: fg,
134 + fontSize: 11,
135 + fontFamily: ff,
136 + formatter: params => {
137 + const pct = typeof params.percent === "number" ? params.percent : 0
138 + return `${pct.toFixed(1)}%`
139 + }
140 + },
141 + labelLine: { show: true, length: 10, length2: 6 },
142 + data: pieData.value
143 }
120 - }
144 + ]
145 }
146 })
147 +
148 +function resolveClickedItemName(params: ECElementEvent): string | undefined {
149 + if (params.componentType === "legend" || params.componentType === "series") {
150 + return params.name ?? (props.labels || [])[params.dataIndex ?? -1]
151 + }
152 + return undefined
153 +}
154 +
155 +function onChartClick(params: ECElementEvent) {
156 + const name = resolveClickedItemName(params)
157 + if (name) emit("itemClick", { name })
158 +}
159 </script>
customer-portal/src/components/common/charts/chartColors.ts deleted
-17
@@ -1,17 +0,0 @@
1 -/** Palette shared by dashboard charts (pie segments, etc.). */
2 -export const DASHBOARD_CHART_COLORS = [
3 - "#8a3ffc",
4 - "#33b1ff",
5 - "#007d79",
6 - "#ff7eb6",
7 - "#fa4d56",
8 - "#fff1f1",
9 - "#6fdc8c",
10 - "#4589ff",
11 - "#d12771",
12 - "#d2a106",
13 - "#08bdba",
14 - "#bae6ff",
15 - "#ba4e00",
16 - "#d4bbff"
17 -]
customer-portal/src/components/common/charts/chartConstants.ts new
+23
@@ -0,0 +1,23 @@
1 +/** Palette condivisa per grafici dashboard (segmenti pie, barre distribuite, …). */
2 +export const CHART_COLORS = [
3 + "#8a3ffc",
4 + "#33b1ff",
5 + "#007d79",
6 + "#ff7eb6",
7 + "#fa4d56",
8 + "#fff1f1",
9 + "#6fdc8c",
10 + "#4589ff",
11 + "#d12771",
12 + "#d2a106",
13 + "#08bdba",
14 + "#bae6ff",
15 + "#ba4e00",
16 + "#d4bbff"
17 +] as const
18 +
19 +/** ECharts 6: equivalente a `grid.containLabel: true` senza il plugin legacy. */
20 +export const CHART_GRID_CONTAIN_AXIS_LABELS = {
21 + outerBoundsMode: "same",
22 + outerBoundsContain: "axisLabel"
23 +} as const
customer-portal/src/components/common/charts/chartTooltip.ts new
+198
@@ -0,0 +1,198 @@
1 +import type { TooltipComponentOption } from "echarts/components"
2 +import type { CallbackDataParams, TopLevelFormatterParams } from "echarts/types/dist/shared"
3 +
4 +export const CHART_TOOLTIP_GLASS_BLUR_PX = 3
5 +
6 +export type ChartTooltipBorder = "primary" | "black"
7 +
8 +export interface ChartTooltipTheme {
9 + fgDefaultColor: string
10 + fontFamily: string
11 + primaryColor?: string
12 +}
13 +
14 +export function chartTooltipThemeFromStyle(style: Record<string, string>): ChartTooltipTheme {
15 + return {
16 + fgDefaultColor: style["fg-default-color"],
17 + fontFamily: style["font-family"],
18 + primaryColor: style["primary-color"]
19 + }
20 +}
21 +
22 +export function getChartTooltipGlassExtraCss(): string {
23 + const alpha = 0.8
24 + const rules = [
25 + `backdrop-filter: blur(${CHART_TOOLTIP_GLASS_BLUR_PX}px)`,
26 + `-webkit-backdrop-filter: blur(${CHART_TOOLTIP_GLASS_BLUR_PX}px)`,
27 + `background-color: rgba(var(--bg-default-color-rgb) / ${alpha}) !important`,
28 + "border-radius: var(--border-radius)",
29 + "box-shadow: 0 5px 10px -5px rgba(0,0,0,0.2), 0 5px 20px 0 rgba(0,0,0,0.2)",
30 + "padding: 0",
31 + "overflow: hidden"
32 + ]
33 + return rules.join("; ")
34 +}
35 +
36 +export function buildChartTooltipGlassBase(
37 + theme: ChartTooltipTheme,
38 + options?: { trigger?: TooltipComponentOption["trigger"] }
39 +): Pick<
40 + TooltipComponentOption,
41 + "trigger" | "backgroundColor" | "borderColor" | "borderWidth" | "textStyle" | "extraCssText"
42 +> {
43 + return {
44 + trigger: options?.trigger ?? "item",
45 + backgroundColor: "transparent",
46 + borderColor: "var(--border-color)",
47 + borderWidth: 1,
48 + textStyle: {
49 + color: theme.fgDefaultColor,
50 + fontSize: 12,
51 + fontFamily: theme.fontFamily
52 + },
53 + extraCssText: getChartTooltipGlassExtraCss()
54 + }
55 +}
56 +
57 +export function resolveChartItemColor(color: CallbackDataParams["color"]): string {
58 + return typeof color === "string" ? color : "#000000"
59 +}
60 +
61 +export function resolveChartTooltipMarker(options: {
62 + marker: CallbackDataParams["marker"]
63 + color: CallbackDataParams["color"]
64 +}): string {
65 + if (typeof options.marker === "string") return options.marker
66 + const fill = resolveChartItemColor(options.color)
67 + return `<span style="display:inline-block;vertical-align:middle;width:10px;height:10px;border-radius:50%;background:${fill};"></span>`
68 +}
69 +
70 +/** Tooltip a due sezioni con header (pallino + titolo) e corpo. */
71 +export function formatChartTooltipWithMarker(options: {
72 + marker: CallbackDataParams["marker"]
73 + color: CallbackDataParams["color"]
74 + title: string
75 + lines: string[]
76 +}): string {
77 + const dot = resolveChartTooltipMarker(options)
78 + return `
79 + <div style="display:flex;align-items:center;gap:8px;background-color:var(--bg-default-color);padding: 4px 8px;">
80 + ${dot} ${options.title}
81 + </div>
82 + <div style="padding: 4px 8px;">
83 + ${options.lines.join("<br/>")}
84 + </div>`
85 +}
86 +
87 +export interface ChartTooltipPieFormatterOptions {
88 + resolveColor?: (param: CallbackDataParams) => CallbackDataParams["color"]
89 +}
90 +
91 +export function formatChartTooltipPieItem(
92 + params: CallbackDataParams | CallbackDataParams[] | undefined,
93 + options?: ChartTooltipPieFormatterOptions
94 +): string {
95 + if (!params || Array.isArray(params)) return ""
96 + const val = typeof params.value === "number" ? params.value : 0
97 + const pct = typeof params.percent === "number" ? params.percent : 0
98 + return formatChartTooltipWithMarker({
99 + marker: params.marker,
100 + color: options?.resolveColor?.(params) ?? params.color,
101 + title: params.name ?? "",
102 + lines: [`<strong>${val}</strong> (${pct.toFixed(1)}%)`]
103 + })
104 +}
105 +
106 +export interface ChartTooltipAxisFormatterOptions {
107 + resolveColor?: (param: CallbackDataParams) => CallbackDataParams["color"]
108 +}
109 +
110 +export function formatChartTooltipAxisFirst(
111 + params: TopLevelFormatterParams,
112 + options?: ChartTooltipAxisFormatterOptions
113 +): string {
114 + if (!Array.isArray(params) || params.length === 0) return ""
115 + const p = params[0]
116 + const raw = Array.isArray(p.value) ? p.value[0] : p.value
117 + const val = typeof raw === "number" ? raw : 0
118 + return formatChartTooltipWithMarker({
119 + marker: p.marker,
120 + color: options?.resolveColor?.(p) ?? p.color,
121 + title: p.name ?? "",
122 + lines: [`<strong>${val}</strong>`]
123 + })
124 +}
125 +
126 +export interface ChartTooltipTimeAxisFormatterOptions extends ChartTooltipAxisFormatterOptions {
127 + formatTime?: (timestamp: number) => string
128 +}
129 +
130 +export interface ChartTooltipAxisMultiSeriesRow {
131 + marker: CallbackDataParams["marker"]
132 + color: CallbackDataParams["color"]
133 + label: string
134 + valueHtml: string
135 +}
136 +
137 +export interface ChartTooltipAxisMultiSeriesOptions {
138 + /** Riga titolo senza marker (es. timestamp). */
139 + title: string
140 + /** Colore testo titolo; default `var(--fg-secondary-color)`. */
141 + titleMutedColor?: string
142 + rows: ChartTooltipAxisMultiSeriesRow[]
143 +}
144 +
145 +/** Asse multi-serie: titolo in alto, sotto righe `marker + label + valore`. */
146 +export function formatChartTooltipAxisMultiSeries(options: ChartTooltipAxisMultiSeriesOptions): string {
147 + const titleColor = options.titleMutedColor ?? "var(--fg-secondary-color)"
148 + const rowsHtml = options.rows
149 + .map(row => {
150 + const marker = resolveChartTooltipMarker({ marker: row.marker, color: row.color })
151 + return `<div style="display:flex;align-items:center;gap:4px;line-height:1.5">${marker}<span>${row.label}: <b>${row.valueHtml}</b></span></div>`
152 + })
153 + .join("")
154 + return `
155 + <div style="font-size:11px;color:${titleColor};padding:4px 8px;background-color:var(--bg-default-color)">${options.title}</div>
156 + <div style="padding:4px 8px">${rowsHtml}</div>`
157 +}
158 +
159 +export function formatChartTooltipAxisMultiSeriesFromParams(
160 + params: TopLevelFormatterParams,
161 + options: {
162 + formatTitle: (first: CallbackDataParams) => string
163 + formatRow: (param: CallbackDataParams) => { label: string; valueHtml: string }
164 + titleMutedColor?: string
165 + }
166 +): string {
167 + if (!Array.isArray(params) || params.length === 0) return ""
168 + const first = params[0]
169 + return formatChartTooltipAxisMultiSeries({
170 + title: options.formatTitle(first),
171 + titleMutedColor: options.titleMutedColor,
172 + rows: params.map(p => ({
173 + marker: p.marker,
174 + color: p.color,
175 + label: p.seriesName ?? "",
176 + valueHtml: options.formatRow(p).valueHtml
177 + }))
178 + })
179 +}
180 +
181 +/** Sparkline / asse `time`: titolo = timestamp formattato, corpo = valore. */
182 +export function formatChartTooltipTimeAxisFirst(
183 + params: TopLevelFormatterParams,
184 + options?: ChartTooltipTimeAxisFormatterOptions
185 +): string {
186 + if (!Array.isArray(params) || params.length === 0) return ""
187 + const p = params[0]
188 + const time = Array.isArray(p.value) && typeof p.value[0] === "number" ? p.value[0] : null
189 + const raw = Array.isArray(p.value) ? p.value[1] : p.value
190 + const val = typeof raw === "number" ? raw : Number(raw) || 0
191 + const timeLabel = time != null ? (options?.formatTime?.(time) ?? String(time)) : ""
192 + return formatChartTooltipWithMarker({
193 + marker: p.marker,
194 + color: options?.resolveColor?.(p) ?? p.color,
195 + title: timeLabel,
196 + lines: [`<strong>${val}</strong>`]
197 + })
198 +}
customer-portal/src/components/common/charts/index.ts new
+23
@@ -0,0 +1,23 @@
1 +export { CHART_COLORS, CHART_GRID_CONTAIN_AXIS_LABELS } from "./chartConstants"
2 +export {
3 + buildChartTooltipGlassBase,
4 + chartTooltipThemeFromStyle,
5 + formatChartTooltipAxisFirst,
6 + formatChartTooltipAxisMultiSeries,
7 + formatChartTooltipAxisMultiSeriesFromParams,
8 + formatChartTooltipPieItem,
9 + formatChartTooltipTimeAxisFirst,
10 + formatChartTooltipWithMarker,
11 + getChartTooltipGlassExtraCss,
12 + resolveChartItemColor,
13 + resolveChartTooltipMarker
14 +} from "./chartTooltip"
15 +export type {
16 + ChartTooltipAxisFormatterOptions,
17 + ChartTooltipAxisMultiSeriesOptions,
18 + ChartTooltipAxisMultiSeriesRow,
19 + ChartTooltipBorder,
20 + ChartTooltipPieFormatterOptions,
21 + ChartTooltipTheme,
22 + ChartTooltipTimeAxisFormatterOptions
23 +} from "./chartTooltip"
customer-portal/src/components/eventSearch/List.vue
+7 -11
@@ -1,15 +1,11 @@
1 <template>
2 <div class="flex flex-col gap-6">
3 - <SearchForm v-model:query="query" :loading @search="handleSearchFormSearch" @loaded="handleSearchFormLoaded" />
4 -
5 - <!-- No Event Sources Warning -->
6 - <n-alert
7 - v-if="searchFormLoad?.customerCode && !loading && searchFormLoad?.eventSources.length === 0"
8 - type="warning"
9 - title="No Event Sources Configured"
10 - >
11 - No event sources are configured for this customer. Contact your administrator to set up event sources.
12 - </n-alert>
3 + <SearchForm
4 + v-model:query="query"
5 + :loading-events="loading"
6 + @search="handleSearchFormSearch"
7 + @loaded="handleSearchFormLoaded"
8 + />
9
10 <!-- Results -->
11 <div v-if="hasSearched">
@@ -62,7 +58,7 @@ import type { SearchFormLoad, SearchFormParams } from "@/components/eventSearch/
58 import type { ApiError } from "@/types/common"
59 import type { DisplayColumn, EventSearchQueryParams, EventSearchResult, EventSourceItem } from "@/types/siem"
60 import { useElementSize } from "@vueuse/core"
65 -import { NAlert, NButton, NDataTable, NEmpty, useMessage } from "naive-ui"
61 +import { NButton, NDataTable, NEmpty, useMessage } from "naive-ui"
62 import { computed, ref, useTemplateRef } from "vue"
63 import Api from "@/api"
64 import Chip from "@/components/common/Chip.vue"
customer-portal/src/components/eventSearch/SearchForm.vue
+136 -107
@@ -1,102 +1,137 @@
1 <template>
2 - <div class="@container w-full">
3 - <div class="grid grid-cols-1 gap-6 @md:grid-cols-2 @5xl:grid-cols-3">
4 - <n-form-item label="Customer" :show-feedback="false">
5 - <n-select
6 - v-model:value="selectedCustomerCode"
7 - placeholder="Select Customer"
8 - filterable
9 - :options="customerOptions"
10 - @update:value="onCustomerChange"
11 - />
12 - </n-form-item>
13 -
14 - <n-form-item label="Event Source" :show-feedback="false">
15 - <n-select
16 - v-model:value="selectedSourceName"
17 - placeholder="Select Source"
18 - filterable
19 - :options="eventSourceOptions"
20 - :disabled="!selectedCustomerCode"
21 - :loading="loadingEventSources"
22 - />
23 - </n-form-item>
24 -
25 - <n-form-item label="Time Range" :show-feedback="false" class="col-span-full @5xl:col-span-1">
26 - <n-input-group class="w-full">
27 - <n-input-number
28 - v-if="timerangeMode === 'relative'"
29 - v-model:value="filterTimeRange.time"
30 - :min="1"
31 - placeholder="Time"
32 - class="grow text-right [&_input]:pr-3!"
33 - />
34 - <n-select
35 - v-if="timerangeMode === 'relative'"
36 - v-model:value="filterTimeRange.unit"
37 - :options="unitOptions"
38 - placeholder="Time unit"
39 - class="w-40!"
40 - />
41 - <n-date-picker
42 - v-if="timerangeMode === 'absolute'"
43 - v-model:value="daterange"
44 - type="datetimerange"
45 - clearable
46 - class="grow"
47 - />
48 - <n-button v-if="timerangeMode === 'relative'" secondary @click="timerangeMode = 'absolute'">
49 - <template #icon>
50 - <Icon name="carbon:calendar" />
51 - </template>
52 - </n-button>
53 - <n-button v-if="timerangeMode === 'absolute'" secondary @click="timerangeMode = 'relative'">
54 - <template #icon>
55 - <Icon name="carbon:reset" />
56 - </template>
57 - </n-button>
58 - </n-input-group>
59 - </n-form-item>
60 -
61 - <n-form-item label="Lucene Query" :show-feedback="false" class="col-span-full">
62 - <div class="flex w-full flex-col gap-1">
63 - <n-mention
64 - v-model:value="query"
65 - type="textarea"
66 - separator=" "
67 - :autosize="{ minRows: 3, maxRows: 8 }"
68 - placeholder="e.g. agent_name:web-server AND rule_level:>=10"
69 - :options="suggestionOptions"
70 - :prefix="['#']"
71 - :loading="loadingFieldMappings"
72 - :render-label
73 - @select="onMentionSelect"
74 - >
75 - <template #empty>
76 - <n-spin :show="loadingFieldMappings">
77 - <div class="text-secondary text-xs">No field mappings found</div>
78 - </n-spin>
79 - </template>
80 - </n-mention>
81 - <p class="text-secondary text-xs">type # to autocomplete</p>
2 + <div class="flex flex-col gap-4">
3 + <n-alert v-if="showNoSourcesWarning" title="No Event Sources Configured" type="warning" closable>
4 + No event sources are configured for this customer. Contact your administrator to set up event sources.
5 + </n-alert>
6 +
7 + <div class="@container flex w-full flex-col gap-3">
8 + <div class="flex flex-col gap-2">
9 + <div class="flex w-full flex-wrap items-center justify-between gap-2">
10 + <div class="flex items-center gap-2">
11 + Lucene Query
12 + <p class="text-secondary text-xs">type # to autocomplete</p>
13 + </div>
14 + <div class="flex items-center gap-2">
15 + <n-select
16 + v-model:value="selectedCustomerCode"
17 + placeholder="Select Customer"
18 + filterable
19 + size="tiny"
20 + :options="customersOptions"
21 + :consistent-menu-width="false"
22 + @update:value="onCustomerChange"
23 + />
24 +
25 + <n-select
26 + v-model:value="selectedSourceName"
27 + placeholder="Select Source"
28 + filterable
29 + size="tiny"
30 + :options="eventSourceOptions"
31 + :disabled="!selectedCustomerCode"
32 + :loading="loadingEventSources"
33 + :consistent-menu-width="false"
34 + />
35 + </div>
36 </div>
83 - </n-form-item>
84 -
85 - <div class="col-span-full -mt-4 flex items-center justify-end gap-3">
86 - <n-button
87 - secondary
88 - type="primary"
89 - :loading
90 - :disabled="!selectedCustomerCode || !selectedSourceName"
91 - @click="searchEvents"
37 +
38 + <n-mention
39 + v-model:value="query"
40 + type="textarea"
41 + separator=" "
42 + :autosize="{ minRows: 3, maxRows: 8 }"
43 + placeholder="e.g. agent_name:web-server AND rule_level:>=10"
44 + :options="suggestionOptions"
45 + :prefix="['#']"
46 + :loading="loadingFieldMappings"
47 + :render-label
48 + @select="onMentionSelect"
49 >
93 - <template #icon>
94 - <Icon name="carbon:search" />
50 + <template #empty>
51 + <n-spin :show="loadingFieldMappings">
52 + <div class="text-secondary text-xs">No field mappings found</div>
53 + </n-spin>
54 </template>
96 - Search
97 - </n-button>
55 + </n-mention>
56 + </div>
57
99 - <n-select v-model:value="pageSize" :options="pageSizeOptions" class="w-36!" />
58 + <div class="flex flex-wrap justify-between gap-3">
59 + <div class="text-secondary text-xs">
60 + {{
61 + !selectedCustomerCode
62 + ? "Select a customer to search"
63 + : !selectedSourceName
64 + ? "Select a source to search"
65 + : ""
66 + }}
67 + </div>
68 +
69 + <div class="flex flex-wrap items-center justify-end gap-3">
70 + <n-input-group class="flex flex-1 items-center justify-end">
71 + <n-input-number
72 + v-if="timerangeMode === 'relative'"
73 + v-model:value="filterTimeRange.time"
74 + :show-button="false"
75 + :min="1"
76 + size="small"
77 + placeholder="Time"
78 + class="max-w-15! min-w-10! text-center"
79 + />
80 + <n-select
81 + v-if="timerangeMode === 'relative'"
82 + v-model:value="filterTimeRange.unit"
83 + :options="unitOptions"
84 + class="max-w-25!"
85 + placeholder="Time unit"
86 + :consistent-menu-width="false"
87 + size="small"
88 + />
89 + <n-date-picker
90 + v-if="timerangeMode === 'absolute'"
91 + v-model:value="daterange"
92 + type="datetimerange"
93 + class="min-w-70"
94 + clearable
95 + size="small"
96 + />
97 + <n-button
98 + v-if="timerangeMode === 'relative'"
99 + secondary
100 + size="small"
101 + @click="timerangeMode = 'absolute'"
102 + >
103 + <template #icon>
104 + <Icon name="carbon:calendar" />
105 + </template>
106 + </n-button>
107 + <n-button
108 + v-if="timerangeMode === 'absolute'"
109 + secondary
110 + size="small"
111 + @click="timerangeMode = 'relative'"
112 + >
113 + <template #icon>
114 + <Icon name="carbon:reset" />
115 + </template>
116 + </n-button>
117 + </n-input-group>
118 +
119 + <n-select v-model:value="pageSize" :options="pageSizeOptions" size="small" class="w-33!" />
120 +
121 + <n-button
122 + secondary
123 + size="small"
124 + type="primary"
125 + :loading="loadingEvents"
126 + :disabled="!selectedCustomerCode || !selectedSourceName"
127 + @click="searchEvents"
128 + >
129 + <template #icon>
130 + <Icon name="carbon:search" />
131 + </template>
132 + Search
133 + </n-button>
134 + </div>
135 </div>
136 </div>
137 </div>
@@ -107,17 +142,7 @@ import type { MentionOption } from "naive-ui"
142 import type { VNodeChild } from "vue"
143 import type { ApiError } from "@/types/common"
144 import type { EventSearchQueryTimerange, EventSourceItem, FieldMapping } from "@/types/siem"
110 -import {
111 - NButton,
112 - NDatePicker,
113 - NFormItem,
114 - NInputGroup,
115 - NInputNumber,
116 - NMention,
117 - NSelect,
118 - NSpin,
119 - useMessage
120 -} from "naive-ui"
145 +import { NAlert, NButton, NDatePicker, NInputGroup, NInputNumber, NMention, NSelect, NSpin, useMessage } from "naive-ui"
146 import { computed, h, onBeforeMount, ref, watch } from "vue"
147 import { useRoute } from "vue-router"
148 import Api from "@/api"
@@ -144,7 +169,7 @@ export interface SearchFormLoad {
169 }
170
171 defineProps<{
147 - loading: boolean
172 + loadingEvents: boolean
173 }>()
174
175 const emit = defineEmits<{
@@ -162,7 +187,7 @@ const customerFilterStore = useCustomerFilterStore()
187 const message = useMessage()
188
189 const customerCode = computed(() => authStore.userCustomerCode)
165 -const customerOptions = computed(() => authStore.accessibleCustomerCodes.map(code => ({ label: code, value: code })))
190 +const customersOptions = computed(() => authStore.accessibleCustomerCodes.map(code => ({ label: code, value: code })))
191 // Seed the searched customer from the global filter when it resolves to a single
192 // customer, otherwise the user's primary / first accessible customer.
193 const selectedCustomerCode = ref(
@@ -179,6 +204,10 @@ const eventSourceOptions = computed(() =>
204 enabledSources.value.map(s => ({ label: `${s.name} (${s.event_type})`, value: s.name }))
205 )
206
207 +const showNoSourcesWarning = computed(
208 + () => selectedCustomerCode.value && !loadingEventSources.value && eventSources.value.length === 0
209 +)
210 +
211 const filterTimeRange = ref<{ unit: "h" | "d" | "w"; time: number }>({
212 unit: "h",
213 time: 24
customer-portal/src/utils/secure-storage.ts
+8 -1
@@ -1,4 +1,11 @@
1 -import SecureLS from "secure-ls"
1 +import SecureLSModule from "secure-ls"
2 +
3 +type SecureLSConstructor = typeof SecureLSModule
4 +
5 +const SecureLS: SecureLSConstructor =
6 + typeof SecureLSModule === "function"
7 + ? SecureLSModule
8 + : (SecureLSModule as unknown as { default: SecureLSConstructor }).default
9
10 const secureLS = new SecureLS({
11 encodingType: "aes",
frontend/Dockerfile
+1 -1
@@ -5,7 +5,7 @@
5 # RUN npm install -g pnpm
6
7 FROM node:24 AS builder
8 -RUN corepack enable && corepack prepare pnpm@11.1.1 --activate
8 +RUN corepack enable && corepack prepare pnpm@11.5.0 --activate
9
10 # Drop root
11 USER node
frontend/package.json
+14 -16
@@ -3,7 +3,7 @@
3 "type": "module",
4 "version": "1.0.0",
5 "private": true,
6 - "packageManager": "pnpm@11.3.0+sha512.2c403d6594527287672b1f7056343a1f7c3634036a67ffabfcc2b3d7595d843768f8787148d1b57cf7956c90606bbd192857c363af19e96d2d0ec9ec5741d215",
6 + "packageManager": "pnpm@11.5.0+sha512.dbfcc4f81cf48597afd4bc391ffdf12c11f1a9fb83a395bfa6b0a2d9cc2fd8ffebafdb1ccbd529632153f793904c2615b7f09fe1a345473fd1c35845172a8eb1",
7 "engines": {
8 "node": ">=24.0.0"
9 },
@@ -54,8 +54,7 @@
54 "@types/codemirror": "^5.60.17",
55 "@vueuse/core": "^14.3.0",
56 "@vueuse/motion": "^3.0.3",
57 - "algoliasearch": "^5.52.1",
58 - "apexcharts": "^5.13.0",
57 + "algoliasearch": "^5.53.0",
58 "axios": "^1.16.1",
59 "bytes": "^3.1.2",
60 "codemirror": "~6.0.2",
@@ -76,11 +75,12 @@
75 "password-validator": "^5.3.0",
76 "pinia": "^3.0.4",
77 "pinia-plugin-persistedstate": "^4.7.1",
79 - "react": "^19.2.6",
80 - "react-dom": "^19.2.6",
78 + "react": "^19.2.7",
79 + "react-dom": "^19.2.7",
80 "react-router-dom": "^7.16.0",
81 "react18-json-view": "^0.2.10",
82 "remark-breaks": "^4.0.0",
83 + "rolldown": "1.0.1",
84 "secure-ls": "^2.0.0",
85 "shiki": "^4.1.0",
86 "thememirror": "^2.0.1",
@@ -93,7 +93,6 @@
93 "vue-i18n": "^11.4.4",
94 "vue-router": "^5.1.0",
95 "vue-sjv": "^0.0.6",
96 - "vue3-apexcharts": "^1.11.1",
96 "vue3-marquee": "^4.2.2",
97 "vuedraggable": "^4.1.0",
98 "xmllint": "^0.1.1",
@@ -106,7 +105,7 @@
105 },
106 "devDependencies": {
107 "@antfu/eslint-config": "~9.0.0",
109 - "@clack/prompts": "^1.4.0",
108 + "@clack/prompts": "^1.5.0",
109 "@iconify/vue": "^5.0.1",
110 "@tailwindcss/vite": "^4.3.0",
111 "@tsconfig/node20": "^20.1.9",
@@ -118,16 +117,16 @@
117 "@types/markdown-it": "^14.1.2",
118 "@types/node": "^25.9.1",
119 "@types/papaparse": "^5.5.2",
121 - "@types/react": "^19.2.15",
120 + "@types/react": "^19.2.16",
121 "@types/react-dom": "^19.2.3",
122 "@types/validator": "^13.15.10",
123 "@vitejs/plugin-vue": "^6.0.7",
124 "@vitejs/plugin-vue-jsx": "^5.1.5",
125 "@vue/test-utils": "^2.4.10",
126 "@vue/tsconfig": "~0.9.1",
128 - "baseline-browser-mapping": "^2.10.32",
127 + "baseline-browser-mapping": "^2.10.33",
128 "depcheck": "^1.4.7",
130 - "eslint": "~10.4.0",
129 + "eslint": "~10.4.1",
130 "flourite": "^1.3.0",
131 "fs-extra": "^11.3.5",
132 "jscpd": "^4.2.4",
@@ -135,19 +134,18 @@
134 "npm-run-all2": "^9.0.1",
135 "prettier": "^3.8.3",
136 "prettier-plugin-tailwindcss": "^0.8.0",
138 - "rolldown": "1.0.3",
137 "sass": "^1.100.0",
138 "start-server-and-test": "^3.0.5",
139 "tailwindcss": "^4.3.0",
140 "taze": "^19.14.1",
143 - "type-fest": "^5.6.0",
141 + "type-fest": "^5.7.0",
142 "typescript": "~6.0.3",
145 - "vite": "8.0.13",
143 + "vite": "^8.0.16",
144 "vite-bundle-visualizer": "^1.2.1",
147 - "vite-plugin-inspect": "^11.3.3",
145 + "vite-plugin-inspect": "^11.4.1",
146 "vite-plugin-vue-devtools": "^8.1.2",
147 "vite-svg-loader": "^5.1.1",
150 - "vitest": "^4.1.7",
151 - "vue-tsc": "^3.3.2"
148 + "vitest": "^4.1.8",
149 + "vue-tsc": "^3.3.3"
150 }
151 }
\ No newline at end of file
frontend/pnpm-lock.yaml
+640 -875
@@ -6,6 +6,7 @@ settings:
6
7 overrides:
8 '@mui/icons-material': ^7.3.9
9 + rolldown: 1.0.1
10
11 importers:
12
@@ -52,13 +53,13 @@ importers:
53 version: 2.0.1
54 '@mui/material':
55 specifier: ^9.0.1
55 - version: 9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
56 + version: 9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
57 '@shikijs/markdown-it':
58 specifier: ^4.1.0
59 version: 4.1.0
60 '@shuffleio/shuffle-mcps':
61 specifier: ^0.0.32
61 - version: 0.0.32(@emotion/is-prop-valid@1.4.0)(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.15)(lucide-react@1.16.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react-router-dom@7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)
62 + version: 0.0.32(@emotion/is-prop-valid@1.4.0)(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react@19.2.16)(lucide-react@1.17.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react-router-dom@7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)
63 '@types/codemirror':
64 specifier: ^5.60.17
65 version: 5.60.17
@@ -69,11 +70,8 @@ importers:
70 specifier: ^3.0.3
71 version: 3.0.3(vue@3.5.35(typescript@6.0.3))
72 algoliasearch:
72 - specifier: ^5.52.1
73 - version: 5.52.1
74 - apexcharts:
75 - specifier: ^5.13.0
76 - version: 5.13.0
73 + specifier: ^5.53.0
74 + version: 5.53.0
75 axios:
76 specifier: ^1.16.1
77 version: 1.16.1(debug@4.4.3)
@@ -135,20 +133,23 @@ importers:
133 specifier: ^4.7.1
134 version: 4.7.1(@nuxt/kit@3.21.6)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))
135 react:
138 - specifier: ^19.2.6
139 - version: 19.2.6
136 + specifier: ^19.2.7
137 + version: 19.2.7
138 react-dom:
141 - specifier: ^19.2.6
142 - version: 19.2.6(react@19.2.6)
139 + specifier: ^19.2.7
140 + version: 19.2.7(react@19.2.7)
141 react-router-dom:
142 specifier: ^7.16.0
145 - version: 7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
143 + version: 7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
144 react18-json-view:
145 specifier: ^0.2.10
148 - version: 0.2.10(react@19.2.6)
146 + version: 0.2.10(react@19.2.7)
147 remark-breaks:
148 specifier: ^4.0.0
149 version: 4.0.0
150 + rolldown:
151 + specifier: 1.0.1
152 + version: 1.0.1
153 secure-ls:
154 specifier: ^2.0.0
155 version: 2.0.0
@@ -181,13 +182,10 @@ importers:
182 version: 11.4.4(vue@3.5.35(typescript@6.0.3))
183 vue-router:
184 specifier: ^5.1.0
184 - version: 5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
185 + version: 5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
186 vue-sjv:
187 specifier: ^0.0.6
188 version: 0.0.6(vue@3.5.35(typescript@6.0.3))
188 - vue3-apexcharts:
189 - specifier: ^1.11.1
190 - version: 1.11.1(apexcharts@5.13.0)(vue@3.5.35(typescript@6.0.3))
189 vue3-marquee:
190 specifier: ^4.2.2
191 version: 4.2.2(vue@3.5.35(typescript@6.0.3))
@@ -203,16 +201,16 @@ importers:
201 devDependencies:
202 '@antfu/eslint-config':
203 specifier: ~9.0.0
206 - version: 9.0.0(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))
204 + version: 9.0.0(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))
205 '@clack/prompts':
208 - specifier: ^1.4.0
209 - version: 1.4.0
206 + specifier: ^1.5.0
207 + version: 1.5.0
208 '@iconify/vue':
209 specifier: ^5.0.1
210 version: 5.0.1(vue@3.5.35(typescript@6.0.3))
211 '@tailwindcss/vite':
212 specifier: ^4.3.0
215 - version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
213 + version: 4.3.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
214 '@tsconfig/node20':
215 specifier: ^20.1.9
216 version: 20.1.9
@@ -241,20 +239,20 @@ importers:
239 specifier: ^5.5.2
240 version: 5.5.2
241 '@types/react':
244 - specifier: ^19.2.15
245 - version: 19.2.15
242 + specifier: ^19.2.16
243 + version: 19.2.16
244 '@types/react-dom':
245 specifier: ^19.2.3
248 - version: 19.2.3(@types/react@19.2.15)
246 + version: 19.2.3(@types/react@19.2.16)
247 '@types/validator':
248 specifier: ^13.15.10
249 version: 13.15.10
250 '@vitejs/plugin-vue':
251 specifier: ^6.0.7
254 - version: 6.0.7(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
252 + version: 6.0.7(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
253 '@vitejs/plugin-vue-jsx':
254 specifier: ^5.1.5
257 - version: 5.1.5(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
255 + version: 5.1.5(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
256 '@vue/test-utils':
257 specifier: ^2.4.10
258 version: 2.4.10(@vue/compiler-dom@3.5.35)(@vue/server-renderer@3.5.35(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3))
@@ -262,14 +260,14 @@ importers:
260 specifier: ~0.9.1
261 version: 0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
262 baseline-browser-mapping:
265 - specifier: ^2.10.32
266 - version: 2.10.32
263 + specifier: ^2.10.33
264 + version: 2.10.33
265 depcheck:
266 specifier: ^1.4.7
267 version: 1.4.7
268 eslint:
271 - specifier: ~10.4.0
272 - version: 10.4.0(jiti@2.7.0)
269 + specifier: ~10.4.1
270 + version: 10.4.1(jiti@2.7.0)
271 flourite:
272 specifier: ^1.3.0
273 version: 1.3.0
@@ -291,9 +289,6 @@ importers:
289 prettier-plugin-tailwindcss:
290 specifier: ^0.8.0
291 version: 0.8.0(prettier@3.8.3)
294 - rolldown:
295 - specifier: 1.0.3
296 - version: 1.0.3
292 sass:
293 specifier: ^1.100.0
294 version: 1.100.0
@@ -307,36 +302,36 @@ importers:
302 specifier: ^19.14.1
303 version: 19.14.1
304 type-fest:
310 - specifier: ^5.6.0
311 - version: 5.6.0
305 + specifier: ^5.7.0
306 + version: 5.7.0
307 typescript:
308 specifier: ~6.0.3
309 version: 6.0.3
310 vite:
316 - specifier: 8.0.13
317 - version: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
311 + specifier: ^8.0.16
312 + version: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
313 vite-bundle-visualizer:
314 specifier: ^1.2.1
320 - version: 1.2.1(rolldown@1.0.3)
315 + version: 1.2.1(rolldown@1.0.1)
316 vite-plugin-inspect:
322 - specifier: ^11.3.3
323 - version: 11.3.3(@nuxt/kit@3.21.6)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
317 + specifier: ^11.4.1
318 + version: 11.4.1(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
319 vite-plugin-vue-devtools:
320 specifier: ^8.1.2
326 - version: 8.1.2(@nuxt/kit@3.21.6)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
321 + version: 8.1.2(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))
322 vite-svg-loader:
323 specifier: ^5.1.1
324 version: 5.1.1(vue@3.5.35(typescript@6.0.3))
325 vitest:
331 - specifier: ^4.1.7
332 - version: 4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
326 + specifier: ^4.1.8
327 + version: 4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
328 vue-tsc:
334 - specifier: ^3.3.2
335 - version: 3.3.2(typescript@6.0.3)
329 + specifier: ^3.3.3
330 + version: 3.3.3(typescript@6.0.3)
331 optionalDependencies:
332 '@rollup/rollup-linux-x64-gnu':
333 specifier: ^4.46.2
339 - version: 4.60.4
334 + version: 4.61.0
335 treemate:
336 specifier: ^0.3.11
337 version: 0.3.11
@@ -349,60 +344,60 @@ packages:
344 '@ajoelp/json-to-formdata@1.5.0':
345 resolution: {integrity: sha512-nrlfeTSL0X0dtx5r2KpzPiqLSIQquiiJjUKsQAKzWaCmO2QoYZCyb5ENZwF3YoffKronOCJr25mxaD8JRJmK8w==}
346
352 - '@algolia/abtesting@1.18.1':
353 - resolution: {integrity: sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw==}
347 + '@algolia/abtesting@1.19.0':
348 + resolution: {integrity: sha512-Lhnez3hhXHk25lfxLAMxvkP4fmN3+1RgADhD2ssMDBYuAsDVReeyP+3SGRx+ntq8ijMrLqUyfvO72TB6jsTteQ==}
349 engines: {node: '>= 14.0.0'}
350
356 - '@algolia/client-abtesting@5.52.1':
357 - resolution: {integrity: sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ==}
351 + '@algolia/client-abtesting@5.53.0':
352 + resolution: {integrity: sha512-0ZjA5Hcmaoz5Lj6OG0zhfIyeqzJZnLW2CRJA1W17UwMFGRtZAJ9yJKRvPEDA6gkpsIoQxORTSW6sWFiuYncPNQ==}
353 engines: {node: '>= 14.0.0'}
354
360 - '@algolia/client-analytics@5.52.1':
361 - resolution: {integrity: sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg==}
355 + '@algolia/client-analytics@5.53.0':
356 + resolution: {integrity: sha512-kWNodP75iiEaOtemC9F/hlxNBG5E2QUjN1BusnE6m2b4l7Qh/BUO3fGCVsmKJI65VO4VKGGmT43ICvHtTcJ2JQ==}
357 engines: {node: '>= 14.0.0'}
358
364 - '@algolia/client-common@5.52.1':
365 - resolution: {integrity: sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw==}
359 + '@algolia/client-common@5.53.0':
360 + resolution: {integrity: sha512-YPN45TXD9Wrse185t/Ta7nktZsqpv97oOjCzp2sblHnCL6rBc9TDeJAg1IGl2UpdwnSD05Zu/5wLB4watOUMyg==}
361 engines: {node: '>= 14.0.0'}
362
368 - '@algolia/client-insights@5.52.1':
369 - resolution: {integrity: sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ==}
363 + '@algolia/client-insights@5.53.0':
364 + resolution: {integrity: sha512-qAcYTDJE6m924FDDUQvdD6vh7DYaqOeSpFS74IP37/JRV0v4cGBauyxTF2WzDnokUylQDbqreoFIJZfg0Fitmw==}
365 engines: {node: '>= 14.0.0'}
366
372 - '@algolia/client-personalization@5.52.1':
373 - resolution: {integrity: sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q==}
367 + '@algolia/client-personalization@5.53.0':
368 + resolution: {integrity: sha512-fQaY+DkSJOpuUVUe8MQTwrdiKAqkJGhpDarB08duBn/sUv7Bkib6MDRQauCcWTWTe4HIW+EbwQP9R4kci1V/Yw==}
369 engines: {node: '>= 14.0.0'}
370
376 - '@algolia/client-query-suggestions@5.52.1':
377 - resolution: {integrity: sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ==}
371 + '@algolia/client-query-suggestions@5.53.0':
372 + resolution: {integrity: sha512-o72tsiEZGfeS/dxL9IADfzcZWGEwKDEe5CvtrBuT//3JR+SHuTtHRI2ZTf7D7bcKagcbojvO8hnkHdfoakSlYg==}
373 engines: {node: '>= 14.0.0'}
374
380 - '@algolia/client-search@5.52.1':
381 - resolution: {integrity: sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg==}
375 + '@algolia/client-search@5.53.0':
376 + resolution: {integrity: sha512-Ds16IyPm/dNJPCU8OzApo2gwGrgWT5BYHhE3NFwZbpCveqyvPDB9sZDDkJ5DsdOGT2aC+R3i0/M1OVXF2qdgPg==}
377 engines: {node: '>= 14.0.0'}
378
384 - '@algolia/ingestion@1.52.1':
385 - resolution: {integrity: sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw==}
379 + '@algolia/ingestion@1.53.0':
380 + resolution: {integrity: sha512-oNbT6z4NwD8Pou9VPINGlN/tlG1afESh2EbxqnP6rwl95xKVD/Zlciis1PpNeO/9U/rrajc1+7DcfKi03tX1KQ==}
381 engines: {node: '>= 14.0.0'}
382
388 - '@algolia/monitoring@1.52.1':
389 - resolution: {integrity: sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ==}
383 + '@algolia/monitoring@1.53.0':
384 + resolution: {integrity: sha512-G+KZb/yd+qAOFn/cEvTGeLxQm8aP3a0od50l3z/ylccY+/o4YG3TNcjU1tFQHW4mXC137GPyR7W70R0kRQDLnA==}
385 engines: {node: '>= 14.0.0'}
386
392 - '@algolia/recommend@5.52.1':
393 - resolution: {integrity: sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ==}
387 + '@algolia/recommend@5.53.0':
388 + resolution: {integrity: sha512-6aVfYd55Un6IUgPLbo84WfgFZlS3L0vA1ttzXL5vahHewUJ8jYgd89TzlWRTeej7w70mb9RWsVlFYGmJ/diQww==}
389 engines: {node: '>= 14.0.0'}
390
396 - '@algolia/requester-browser-xhr@5.52.1':
397 - resolution: {integrity: sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q==}
391 + '@algolia/requester-browser-xhr@5.53.0':
392 + resolution: {integrity: sha512-ke27DqgzCOlt+RbeEdCxtXxMQOnAOi8ujr2wid0DmDKzR95Kw/f9sBsuhBxtjevCqJRJszfRTLY0B1pbO6IhkA==}
393 engines: {node: '>= 14.0.0'}
394
400 - '@algolia/requester-fetch@5.52.1':
401 - resolution: {integrity: sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg==}
395 + '@algolia/requester-fetch@5.53.0':
396 + resolution: {integrity: sha512-GngiOqt2Gq4oLno6yXQVj9om+qSO9SWAoduoTOEg79dKZ62brB8OOIvSJG/vDNoanYi6a7Al9uDZwXvi+bcVTg==}
397 engines: {node: '>= 14.0.0'}
398
404 - '@algolia/requester-node-http@5.52.1':
405 - resolution: {integrity: sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg==}
399 + '@algolia/requester-node-http@5.53.0':
400 + resolution: {integrity: sha512-6mF9LZMUk0QqWvrnxkxBqhswwz6Xfiwy6/gmTzL5HrlhdVG3ITAqGV2k3XmVThP1h0Ulc3VQwiNCD7/Nr4JNlQ==}
401 engines: {node: '>= 14.0.0'}
402
403 '@antfu/eslint-config@9.0.0':
@@ -658,12 +653,12 @@ packages:
653 resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
654 hasBin: true
655
661 - '@clack/core@1.3.1':
662 - resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==}
656 + '@clack/core@1.4.0':
657 + resolution: {integrity: sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw==}
658 engines: {node: '>= 20.12.0'}
659
665 - '@clack/prompts@1.4.0':
666 - resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==}
660 + '@clack/prompts@1.5.0':
661 + resolution: {integrity: sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA==}
662 engines: {node: '>= 20.12.0'}
663
664 '@codemirror/autocomplete@6.20.2':
@@ -835,8 +830,8 @@ packages:
830 resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
831 engines: {node: '>=10'}
832
838 - '@eslint-community/eslint-plugin-eslint-comments@4.7.1':
839 - resolution: {integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==}
833 + '@eslint-community/eslint-plugin-eslint-comments@4.7.2':
834 + resolution: {integrity: sha512-LF03qURSwEWm2dz5wtdDCzNk+7Opl0X7q6I3undsaIuNsEiNvRV3BCtqu14Q/6Pzg1tBj44LcxpW2EpSLZStZw==}
835 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
836 peerDependencies:
837 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -884,12 +879,8 @@ packages:
879 resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
880 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
881
887 - '@eslint/plugin-kit@0.6.1':
888 - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
889 - engines: {node: ^20.19.0 || ^22.13.0 || >=24}
890 -
891 - '@eslint/plugin-kit@0.7.1':
892 - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==}
882 + '@eslint/plugin-kit@0.7.2':
883 + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
884 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
885
886 '@exodus/bytes@1.15.1':
@@ -1127,8 +1118,8 @@ packages:
1118 '@emnapi/core': ^1.7.1
1119 '@emnapi/runtime': ^1.7.1
1120
1130 - '@nodable/entities@2.1.0':
1131 - resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==}
1121 + '@nodable/entities@2.1.1':
1122 + resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==}
1123
1124 '@nodelib/fs.scandir@2.1.5':
1125 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -1156,9 +1147,6 @@ packages:
1147 '@oxc-project/types@0.130.0':
1148 resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==}
1149
1159 - '@oxc-project/types@0.133.0':
1160 - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==}
1161 -
1150 '@parcel/watcher-android-arm64@2.5.6':
1151 resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
1152 engines: {node: '>= 10.0.0'}
@@ -1251,9 +1239,9 @@ packages:
1239 resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
1240 engines: {node: '>=14'}
1241
1254 - '@pkgr/core@0.2.9':
1255 - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
1256 - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
1242 + '@pkgr/core@0.3.6':
1243 + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
1244 + engines: {node: ^14.18.0 || >=16.0.0}
1245
1246 '@polka/url@1.0.0-next.29':
1247 resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
@@ -1270,60 +1258,30 @@ packages:
1258 cpu: [arm64]
1259 os: [android]
1260
1273 - '@rolldown/binding-android-arm64@1.0.3':
1274 - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==}
1275 - engines: {node: ^20.19.0 || >=22.12.0}
1276 - cpu: [arm64]
1277 - os: [android]
1278 -
1261 '@rolldown/binding-darwin-arm64@1.0.1':
1262 resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==}
1263 engines: {node: ^20.19.0 || >=22.12.0}
1264 cpu: [arm64]
1265 os: [darwin]
1266
1285 - '@rolldown/binding-darwin-arm64@1.0.3':
1286 - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==}
1287 - engines: {node: ^20.19.0 || >=22.12.0}
1288 - cpu: [arm64]
1289 - os: [darwin]
1290 -
1267 '@rolldown/binding-darwin-x64@1.0.1':
1268 resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==}
1269 engines: {node: ^20.19.0 || >=22.12.0}
1270 cpu: [x64]
1271 os: [darwin]
1272
1297 - '@rolldown/binding-darwin-x64@1.0.3':
1298 - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==}
1299 - engines: {node: ^20.19.0 || >=22.12.0}
1300 - cpu: [x64]
1301 - os: [darwin]
1302 -
1273 '@rolldown/binding-freebsd-x64@1.0.1':
1274 resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==}
1275 engines: {node: ^20.19.0 || >=22.12.0}
1276 cpu: [x64]
1277 os: [freebsd]
1278
1309 - '@rolldown/binding-freebsd-x64@1.0.3':
1310 - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==}
1311 - engines: {node: ^20.19.0 || >=22.12.0}
1312 - cpu: [x64]
1313 - os: [freebsd]
1314 -
1279 '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
1280 resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==}
1281 engines: {node: ^20.19.0 || >=22.12.0}
1282 cpu: [arm]
1283 os: [linux]
1284
1321 - '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
1322 - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==}
1323 - engines: {node: ^20.19.0 || >=22.12.0}
1324 - cpu: [arm]
1325 - os: [linux]
1326 -
1285 '@rolldown/binding-linux-arm64-gnu@1.0.1':
1286 resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==}
1287 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1331,13 +1289,6 @@ packages:
1289 os: [linux]
1290 libc: [glibc]
1291
1334 - '@rolldown/binding-linux-arm64-gnu@1.0.3':
1335 - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==}
1336 - engines: {node: ^20.19.0 || >=22.12.0}
1337 - cpu: [arm64]
1338 - os: [linux]
1339 - libc: [glibc]
1340 -
1292 '@rolldown/binding-linux-arm64-musl@1.0.1':
1293 resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==}
1294 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1345,13 +1296,6 @@ packages:
1296 os: [linux]
1297 libc: [musl]
1298
1348 - '@rolldown/binding-linux-arm64-musl@1.0.3':
1349 - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==}
1350 - engines: {node: ^20.19.0 || >=22.12.0}
1351 - cpu: [arm64]
1352 - os: [linux]
1353 - libc: [musl]
1354 -
1299 '@rolldown/binding-linux-ppc64-gnu@1.0.1':
1300 resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==}
1301 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1359,13 +1303,6 @@ packages:
1303 os: [linux]
1304 libc: [glibc]
1305
1362 - '@rolldown/binding-linux-ppc64-gnu@1.0.3':
1363 - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==}
1364 - engines: {node: ^20.19.0 || >=22.12.0}
1365 - cpu: [ppc64]
1366 - os: [linux]
1367 - libc: [glibc]
1368 -
1306 '@rolldown/binding-linux-s390x-gnu@1.0.1':
1307 resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==}
1308 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1373,13 +1310,6 @@ packages:
1310 os: [linux]
1311 libc: [glibc]
1312
1376 - '@rolldown/binding-linux-s390x-gnu@1.0.3':
1377 - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==}
1378 - engines: {node: ^20.19.0 || >=22.12.0}
1379 - cpu: [s390x]
1380 - os: [linux]
1381 - libc: [glibc]
1382 -
1313 '@rolldown/binding-linux-x64-gnu@1.0.1':
1314 resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==}
1315 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1387,13 +1317,6 @@ packages:
1317 os: [linux]
1318 libc: [glibc]
1319
1390 - '@rolldown/binding-linux-x64-gnu@1.0.3':
1391 - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==}
1392 - engines: {node: ^20.19.0 || >=22.12.0}
1393 - cpu: [x64]
1394 - os: [linux]
1395 - libc: [glibc]
1396 -
1320 '@rolldown/binding-linux-x64-musl@1.0.1':
1321 resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==}
1322 engines: {node: ^20.19.0 || >=22.12.0}
@@ -1401,64 +1324,34 @@ packages:
1324 os: [linux]
1325 libc: [musl]
1326
1404 - '@rolldown/binding-linux-x64-musl@1.0.3':
1405 - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==}
1406 - engines: {node: ^20.19.0 || >=22.12.0}
1407 - cpu: [x64]
1408 - os: [linux]
1409 - libc: [musl]
1410 -
1327 '@rolldown/binding-openharmony-arm64@1.0.1':
1328 resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==}
1329 engines: {node: ^20.19.0 || >=22.12.0}
1330 cpu: [arm64]
1331 os: [openharmony]
1332
1417 - '@rolldown/binding-openharmony-arm64@1.0.3':
1418 - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==}
1419 - engines: {node: ^20.19.0 || >=22.12.0}
1420 - cpu: [arm64]
1421 - os: [openharmony]
1422 -
1333 '@rolldown/binding-wasm32-wasi@1.0.1':
1334 resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==}
1335 engines: {node: ^20.19.0 || >=22.12.0}
1336 cpu: [wasm32]
1337
1428 - '@rolldown/binding-wasm32-wasi@1.0.3':
1429 - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==}
1430 - engines: {node: ^20.19.0 || >=22.12.0}
1431 - cpu: [wasm32]
1432 -
1338 '@rolldown/binding-win32-arm64-msvc@1.0.1':
1339 resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==}
1340 engines: {node: ^20.19.0 || >=22.12.0}
1341 cpu: [arm64]
1342 os: [win32]
1343
1439 - '@rolldown/binding-win32-arm64-msvc@1.0.3':
1440 - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==}
1441 - engines: {node: ^20.19.0 || >=22.12.0}
1442 - cpu: [arm64]
1443 - os: [win32]
1444 -
1344 '@rolldown/binding-win32-x64-msvc@1.0.1':
1345 resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==}
1346 engines: {node: ^20.19.0 || >=22.12.0}
1347 cpu: [x64]
1348 os: [win32]
1349
1451 - '@rolldown/binding-win32-x64-msvc@1.0.3':
1452 - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==}
1453 - engines: {node: ^20.19.0 || >=22.12.0}
1454 - cpu: [x64]
1455 - os: [win32]
1456 -
1350 '@rolldown/pluginutils@1.0.1':
1351 resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
1352
1460 - '@rollup/rollup-linux-x64-gnu@4.60.4':
1461 - resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==}
1353 + '@rollup/rollup-linux-x64-gnu@4.61.0':
1354 + resolution: {integrity: sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==}
1355 cpu: [x64]
1356 os: [linux]
1357 libc: [glibc]
@@ -1721,8 +1614,8 @@ packages:
1614 peerDependencies:
1615 '@types/react': '*'
1616
1724 - '@types/react@19.2.15':
1725 - resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==}
1617 + '@types/react@19.2.16':
1618 + resolution: {integrity: sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==}
1619
1620 '@types/sarif@2.1.7':
1621 resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==}
@@ -1828,8 +1721,8 @@ packages:
1721 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1722 vue: ^3.2.25
1723
1831 - '@vitest/eslint-plugin@1.6.18':
1832 - resolution: {integrity: sha512-J6U4X0jH3NwTuYouvrJn6I8ypTOU+GhKEjyVwpoPnDuc23usa/xi/R0caWLBbNp3xLy3/rL1YkuJuneTMVV4Mg==}
1724 + '@vitest/eslint-plugin@1.6.19':
1725 + resolution: {integrity: sha512-zodmXRsVKFsuHxHJILuTFaaKsrsxm0YsiOX65clk+LpCW9JrVXaf6ERXr0caDs+NEk0S62Jyk0K7XYQ7gWXheA==}
1726 engines: {node: '>=18'}
1727 peerDependencies:
1728 '@typescript-eslint/eslint-plugin': '*'
@@ -1844,11 +1737,11 @@ packages:
1737 vitest:
1738 optional: true
1739
1847 - '@vitest/expect@4.1.7':
1848 - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==}
1740 + '@vitest/expect@4.1.8':
1741 + resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==}
1742
1850 - '@vitest/mocker@4.1.7':
1851 - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==}
1743 + '@vitest/mocker@4.1.8':
1744 + resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==}
1745 peerDependencies:
1746 msw: ^2.4.9
1747 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1858,20 +1751,20 @@ packages:
1751 vite:
1752 optional: true
1753
1861 - '@vitest/pretty-format@4.1.7':
1862 - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==}
1754 + '@vitest/pretty-format@4.1.8':
1755 + resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==}
1756
1864 - '@vitest/runner@4.1.7':
1865 - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==}
1757 + '@vitest/runner@4.1.8':
1758 + resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==}
1759
1867 - '@vitest/snapshot@4.1.7':
1868 - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==}
1760 + '@vitest/snapshot@4.1.8':
1761 + resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==}
1762
1870 - '@vitest/spy@4.1.7':
1871 - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==}
1763 + '@vitest/spy@4.1.8':
1764 + resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==}
1765
1873 - '@vitest/utils@4.1.7':
1874 - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==}
1766 + '@vitest/utils@4.1.8':
1767 + resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==}
1768
1769 '@volar/language-core@2.4.28':
1770 resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
@@ -1923,27 +1816,15 @@ packages:
1816 peerDependencies:
1817 '@babel/core': ^7.0.0-0
1818
1926 - '@vue/compiler-core@3.5.34':
1927 - resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==}
1928 -
1819 '@vue/compiler-core@3.5.35':
1820 resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==}
1821
1932 - '@vue/compiler-dom@3.5.34':
1933 - resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==}
1934 -
1822 '@vue/compiler-dom@3.5.35':
1823 resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==}
1824
1938 - '@vue/compiler-sfc@3.5.34':
1939 - resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==}
1940 -
1825 '@vue/compiler-sfc@3.5.35':
1826 resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==}
1827
1944 - '@vue/compiler-ssr@3.5.34':
1945 - resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==}
1946 -
1828 '@vue/compiler-ssr@3.5.35':
1829 resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==}
1830
@@ -1973,8 +1854,8 @@ packages:
1854 '@vue/devtools-shared@8.1.2':
1855 resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==}
1856
1976 - '@vue/language-core@3.3.2':
1977 - resolution: {integrity: sha512-CLwjSfHlPLhjd2qhuS3tTFtnOIWHXAM5u4X1DxmzlQ8j5bmOYlKCsSusOP7jCRJnlVg0mCTQtHU3vwFvopZGoQ==}
1857 + '@vue/language-core@3.3.3':
1858 + resolution: {integrity: sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ==}
1859
1860 '@vue/reactivity@3.5.35':
1861 resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==}
@@ -1990,9 +1871,6 @@ packages:
1871 peerDependencies:
1872 vue: 3.5.35
1873
1993 - '@vue/shared@3.5.34':
1994 - resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==}
1995 -
1874 '@vue/shared@3.5.35':
1875 resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==}
1876
@@ -2074,8 +1952,8 @@ packages:
1952 ajv@6.15.0:
1953 resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
1954
2077 - algoliasearch@5.52.1:
2078 - resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==}
1955 + algoliasearch@5.53.0:
1956 + resolution: {integrity: sha512-OGW1q6b91CRSSeiOnM8LxuR5NYJ2esvw66jUZ4IIvdv+ItNkx3pwLuyR+jaCdbGee4ov5WgUnyPryyh11xvByQ==}
1957 engines: {node: '>= 14.0.0'}
1958
1959 alien-signals@3.2.1:
@@ -2097,13 +1975,10 @@ packages:
1975 resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
1976 engines: {node: '>=12'}
1977
2100 - ansis@4.3.0:
2101 - resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==}
1978 + ansis@4.3.1:
1979 + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
1980 engines: {node: '>=14'}
1981
2104 - apexcharts@5.13.0:
2105 - resolution: {integrity: sha512-PJuXT6zdiCbv0IkX5cqkKFVIIh+9v3kqP9zsOHEGpIWi7DfTgzvfOKc8icw6G3/ulR3V1alDDUtOVH0zWCWGEQ==}
2106 -
1982 are-docs-informative@0.0.2:
1983 resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
1984 engines: {node: '>=14'}
@@ -2177,8 +2052,8 @@ packages:
2052 resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
2053 engines: {node: 18 || 20 || >=22}
2054
2180 - baseline-browser-mapping@2.10.32:
2181 - resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==}
2055 + baseline-browser-mapping@2.10.33:
2056 + resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==}
2057 engines: {node: '>=6.0.0'}
2058 hasBin: true
2059
@@ -2188,6 +2063,9 @@ packages:
2063 birpc@2.9.0:
2064 resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
2065
2066 + birpc@4.0.0:
2067 + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
2068 +
2069 blamer@1.0.7:
2070 resolution: {integrity: sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==}
2071 engines: {node: '>=8.9'}
@@ -2198,8 +2076,8 @@ packages:
2076 boolbase@1.0.0:
2077 resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
2078
2201 - brace-expansion@1.1.14:
2202 - resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==}
2079 + brace-expansion@1.1.15:
2080 + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==}
2081
2082 brace-expansion@2.1.1:
2083 resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==}
@@ -2480,8 +2358,8 @@ packages:
2358 peerDependencies:
2359 date-fns: ^3.0.0 || ^4.0.0
2360
2483 - date-fns@4.3.0:
2484 - resolution: {integrity: sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ==}
2361 + date-fns@4.4.0:
2362 + resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==}
2363
2364 dayjs@1.11.21:
2365 resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==}
@@ -2604,8 +2482,8 @@ packages:
2482 engines: {node: '>=14'}
2483 hasBin: true
2484
2607 - electron-to-chromium@1.5.361:
2608 - resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==}
2485 + electron-to-chromium@1.5.364:
2486 + resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==}
2487
2488 emoji-regex@8.0.0:
2489 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2620,8 +2498,8 @@ packages:
2498 end-of-stream@1.4.5:
2499 resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
2500
2623 - enhanced-resolve@5.22.0:
2624 - resolution: {integrity: sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==}
2501 + enhanced-resolve@5.22.1:
2502 + resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==}
2503 engines: {node: '>=10.13.0'}
2504
2505 entities@4.5.0:
@@ -2741,8 +2619,8 @@ packages:
2619 peerDependencies:
2620 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
2621
2744 - eslint-plugin-jsonc@3.1.2:
2745 - resolution: {integrity: sha512-dopTxdB22iuOkgKyJCupEC5IYBItUT4J/teq1H5ddUObcaYhOURxtJElZczdcYnnKCghNU/vccuyPkliy2Wxsg==}
2622 + eslint-plugin-jsonc@3.2.0:
2623 + resolution: {integrity: sha512-eQSxJypkpNycQAFE/ph/j+bDD2MiCcojxNb+7nugYzuQZvELYg4YO1Cv1y/8MbjPIEw5u3Lx0VPOTlqJJIhPPw==}
2624 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2625 peerDependencies:
2626 eslint: '>=9.38.0'
@@ -2781,8 +2659,8 @@ packages:
2659 peerDependencies:
2660 eslint: '>=9.38.0'
2661
2784 - eslint-plugin-toml@1.3.1:
2785 - resolution: {integrity: sha512-1l00fBP03HIt9IPV7ZxBi7x0y0NMdEZmakL1jBD6N/FoKBvfKxPw5S8XkmzBecOnFBTn5Z8sNJtL5vdf9cpRMQ==}
2662 + eslint-plugin-toml@1.4.0:
2663 + resolution: {integrity: sha512-3ErTnfUjXq/23f72XeyRcE0Y4Sd/ME1lsZeezczqpn2R4tE7+Sgco/NUKDXm0xAMz15tzcRz/9RfJRm6AqRO+A==}
2664 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2665 peerDependencies:
2666 eslint: '>=9.38.0'
@@ -2816,8 +2694,8 @@ packages:
2694 '@typescript-eslint/parser':
2695 optional: true
2696
2819 - eslint-plugin-yml@3.3.2:
2820 - resolution: {integrity: sha512-XjmOB/fLBwYHqevnpclPL938V+9ExX7xw1hPaM3IPePGyMFRV1giS16RjSTNhIyCv/Oh0G0PEdmmZPATJ02YCw==}
2697 + eslint-plugin-yml@3.4.0:
2698 + resolution: {integrity: sha512-j6U3ESrAkidkvNb3HFN2UMxke46GNp6bsJokabXCICcgomSy3YU4oED9cjzkZ58nYxWD5qnWV1b/2YlqyWMOxA==}
2699 engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
2700 peerDependencies:
2701 eslint: '>=9.38.0'
@@ -2844,8 +2722,8 @@ packages:
2722 resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
2723 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2724
2847 - eslint@10.4.0:
2848 - resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==}
2725 + eslint@10.4.1:
2726 + resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==}
2727 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2728 hasBin: true
2729 peerDependencies:
@@ -3135,8 +3013,8 @@ packages:
3013 resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
3014 engines: {node: '>= 0.4'}
3015
3138 - hasown@2.0.3:
3139 - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
3016 + hasown@2.0.4:
3017 + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
3018 engines: {node: '>= 0.4'}
3019
3020 hast-util-to-html@9.0.5:
@@ -3201,8 +3079,8 @@ packages:
3079 resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
3080 engines: {node: '>= 4'}
3081
3204 - immutable@5.1.5:
3205 - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==}
3082 + immutable@5.1.6:
3083 + resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==}
3084
3085 import-fresh@3.3.1:
3086 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
@@ -3277,6 +3155,10 @@ packages:
3155 is-hexadecimal@2.0.1:
3156 resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
3157
3158 + is-in-ssh@1.0.0:
3159 + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
3160 + engines: {node: '>=20'}
3161 +
3162 is-inside-container@1.0.0:
3163 resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
3164 engines: {node: '>=14.16'}
@@ -3346,9 +3228,8 @@ packages:
3228 engines: {node: '>=14'}
3229 hasBin: true
3230
3349 - js-cookie@3.0.7:
3350 - resolution: {integrity: sha512-z/wZZgDrkNV1eA0ULjM/F9/50Ya8fbzgKneSpoPsXSGd0KnpdtHfOZWK+GcwLk+EZbS4F9RBhU+K2RgzuDaItw==}
3351 - engines: {node: '>=20'}
3231 + js-cookie@3.0.8:
3232 + resolution: {integrity: sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==}
3233
3234 js-md5@0.8.3:
3235 resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==}
@@ -3558,15 +3439,15 @@ packages:
3439 lru-cache@10.4.3:
3440 resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
3441
3561 - lru-cache@11.5.0:
3562 - resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==}
3442 + lru-cache@11.5.1:
3443 + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
3444 engines: {node: 20 || >=22}
3445
3446 lru-cache@5.1.1:
3447 resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
3448
3568 - lucide-react@1.16.0:
3569 - resolution: {integrity: sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==}
3449 + lucide-react@1.17.0:
3450 + resolution: {integrity: sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==}
3451 peerDependencies:
3452 react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
3453
@@ -3924,9 +3805,9 @@ packages:
3805 oniguruma-to-es@4.3.6:
3806 resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
3807
3927 - open@10.2.0:
3928 - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
3929 - engines: {node: '>=18'}
3808 + open@11.0.0:
3809 + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
3810 + engines: {node: '>=20'}
3811
3812 open@8.4.2:
3813 resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -4086,6 +3967,10 @@ packages:
3967 resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
3968 engines: {node: ^10 || ^12 || >=14}
3969
3970 + powershell-utils@0.1.0:
3971 + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
3972 + engines: {node: '>=20'}
3973 +
3974 prelude-ls@1.2.1:
3975 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
3976 engines: {node: '>= 0.8.0'}
@@ -4156,8 +4041,8 @@ packages:
4041 prop-types@15.8.1:
4042 resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
4043
4159 - property-information@7.1.0:
4160 - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
4044 + property-information@7.2.0:
4045 + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
4046
4047 proto-list@1.2.4:
4048 resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
@@ -4225,16 +4110,16 @@ packages:
4110 rc9@3.0.1:
4111 resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
4112
4228 - react-dom@19.2.6:
4229 - resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==}
4113 + react-dom@19.2.7:
4114 + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==}
4115 peerDependencies:
4231 - react: ^19.2.6
4116 + react: ^19.2.7
4117
4118 react-is@16.13.1:
4119 resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
4120
4236 - react-is@19.2.6:
4237 - resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==}
4121 + react-is@19.2.7:
4122 + resolution: {integrity: sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==}
4123
4124 react-markdown@10.1.0:
4125 resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
@@ -4270,8 +4155,8 @@ packages:
4155 peerDependencies:
4156 react: '>=16.8.0'
4157
4273 - react@19.2.6:
4274 - resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==}
4158 + react@19.2.7:
4159 + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==}
4160 engines: {node: '>=0.10.0'}
4161
4162 read-package-json-fast@6.0.0:
@@ -4381,17 +4266,12 @@ packages:
4266 engines: {node: ^20.19.0 || >=22.12.0}
4267 hasBin: true
4268
4384 - rolldown@1.0.3:
4385 - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==}
4386 - engines: {node: ^20.19.0 || >=22.12.0}
4387 - hasBin: true
4388 -
4269 rollup-plugin-visualizer@5.14.0:
4270 resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==}
4271 engines: {node: '>=18'}
4272 hasBin: true
4273 peerDependencies:
4394 - rolldown: 1.x
4274 + rolldown: 1.0.1
4275 rollup: 2.x || 3.x || 4.x
4276 peerDependenciesMeta:
4277 rolldown:
@@ -4602,8 +4482,8 @@ packages:
4482 symbol-tree@3.2.4:
4483 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
4484
4605 - synckit@0.11.12:
4606 - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
4485 + synckit@0.11.13:
4486 + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==}
4487 engines: {node: ^14.18.0 || >=16.0.0}
4488
4489 tagged-tag@1.0.0:
@@ -4631,27 +4511,27 @@ packages:
4511 tinybench@2.9.0:
4512 resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
4513
4634 - tinyexec@1.2.2:
4635 - resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==}
4514 + tinyexec@1.2.4:
4515 + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
4516 engines: {node: '>=18'}
4517
4638 - tinyglobby@0.2.16:
4639 - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
4518 + tinyglobby@0.2.17:
4519 + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
4520 engines: {node: '>=12.0.0'}
4521
4522 tinyrainbow@3.1.0:
4523 resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
4524 engines: {node: '>=14.0.0'}
4525
4646 - tldts-core@7.4.0:
4647 - resolution: {integrity: sha512-/mb9kRld+x1sIMXxWNOAp5m6C+D4GrAORWlJkOJ5dElvxdN1eutz/o7qHLp9gFvDF4Y3/L2xeScoxz6AbEo8rQ==}
4526 + tldts-core@7.4.2:
4527 + resolution: {integrity: sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==}
4528
4649 - tldts@7.4.0:
4650 - resolution: {integrity: sha512-yHBe+zVfzNZ3QfTPW/Z6KK1G2t340gFjMHqI/4KKSt/abzYydzuCnpqdaF5gCCABby+9Yfbj59oR5F2Fd5CBzg==}
4529 + tldts@7.4.2:
4530 + resolution: {integrity: sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==}
4531 hasBin: true
4532
4653 - tmp@0.2.5:
4654 - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
4533 + tmp@0.2.7:
4534 + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==}
4535 engines: {node: '>=14.14'}
4536
4537 to-regex-range@5.0.1:
@@ -4716,8 +4596,8 @@ packages:
4596 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
4597 engines: {node: '>= 0.8.0'}
4598
4719 - type-fest@5.6.0:
4720 - resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
4599 + type-fest@5.7.0:
4600 + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==}
4601 engines: {node: '>=20'}
4602
4603 typescript@6.0.3:
@@ -4743,11 +4623,11 @@ packages:
4623 undici-types@7.24.6:
4624 resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
4625
4746 - undici-types@7.26.0:
4747 - resolution: {integrity: sha512-OY7qWYg4TsPpqg/kL2FfNnGA8cmAhPpLt45XQ2jd8p9UobYQ7Q09LeiCq5QwZhlKNLBj0iTUlBNhs4M2AVFmxA==}
4626 + undici-types@7.27.0:
4627 + resolution: {integrity: sha512-sqqlwW3zm+cE82GwKdGyn3pcze7LXlx/4jUgA0vtAf6Fa81KMrJqc3VfWmmeOTUIElW9IdPsLwMUIpiOZQgK3A==}
4628
4749 - undici@7.26.0:
4750 - resolution: {integrity: sha512-3O9Tf67pGhgOv9jM35AbhkXAKi13f3oy3aE4CSgr+TckGeY+/iu97ZXN+J7DpHPzLbVApFd1IFhcnBjREYXYcg==}
4629 + undici@7.27.0:
4630 + resolution: {integrity: sha512-+t2Z/GwkZQDtu00813aP66ygViGtPHKhhoFZpQKpKrE+9jIgES+Zw+mFNaDWOVRKiuJjuqKHzD3B1sfGg8+ZOQ==}
4631 engines: {node: '>=20.18.1'}
4632
4633 unified@11.0.5:
@@ -4823,22 +4703,22 @@ packages:
4703 engines: {node: ^18.19.0 || >=20.6.0}
4704 hasBin: true
4705
4826 - vite-dev-rpc@1.1.0:
4827 - resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
4706 + vite-dev-rpc@2.0.0:
4707 + resolution: {integrity: sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==}
4708 peerDependencies:
4829 - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0
4709 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0
4710
4711 vite-hot-client@2.2.0:
4712 resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==}
4713 peerDependencies:
4714 vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0
4715
4836 - vite-plugin-inspect@11.3.3:
4837 - resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==}
4716 + vite-plugin-inspect@11.4.1:
4717 + resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==}
4718 engines: {node: '>=14'}
4719 peerDependencies:
4720 '@nuxt/kit': '*'
4841 - vite: ^6.0.0 || ^7.0.0-0
4721 + vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0
4722 peerDependenciesMeta:
4723 '@nuxt/kit':
4724 optional: true
@@ -4859,8 +4739,8 @@ packages:
4739 peerDependencies:
4740 vue: '>=3.2.13'
4741
4862 - vite@8.0.13:
4863 - resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==}
4742 + vite@8.0.16:
4743 + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==}
4744 engines: {node: ^20.19.0 || >=22.12.0}
4745 hasBin: true
4746 peerDependencies:
@@ -4902,20 +4782,20 @@ packages:
4782 yaml:
4783 optional: true
4784
4905 - vitest@4.1.7:
4906 - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==}
4785 + vitest@4.1.8:
4786 + resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==}
4787 engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
4788 hasBin: true
4789 peerDependencies:
4790 '@edge-runtime/vm': '*'
4791 '@opentelemetry/api': ^1.9.0
4792 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
4913 - '@vitest/browser-playwright': 4.1.7
4914 - '@vitest/browser-preview': 4.1.7
4915 - '@vitest/browser-webdriverio': 4.1.7
4916 - '@vitest/coverage-istanbul': 4.1.7
4917 - '@vitest/coverage-v8': 4.1.7
4918 - '@vitest/ui': 4.1.7
4793 + '@vitest/browser-playwright': 4.1.8
4794 + '@vitest/browser-preview': 4.1.8
4795 + '@vitest/browser-webdriverio': 4.1.8
4796 + '@vitest/coverage-istanbul': 4.1.8
4797 + '@vitest/coverage-v8': 4.1.8
4798 + '@vitest/ui': 4.1.8
4799 happy-dom: '*'
4800 jsdom: '*'
4801 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -4967,8 +4847,8 @@ packages:
4847 codemirror: 6.x
4848 vue: 3.x
4849
4970 - vue-component-type-helpers@3.3.2:
4971 - resolution: {integrity: sha512-l4Z2Y34m7nFMlx8vrslJaVtXxUpzgDMSESC7TakG/c5kwjYT/do+E0NcT2/vWDzaoIhsShg/2OKwX7Q4nbzC0g==}
4850 + vue-component-type-helpers@3.3.3:
4851 + resolution: {integrity: sha512-x4nsFpy5Pe8fqPzp/5vkTPeTTDBpAx4WVtV47Ejt0+2FQrq4pRRsJs7JmYRqMFzTu/LW+pCWEjQ3YVCkPV7f9g==}
4852
4853 vue-echarts@8.0.1:
4854 resolution: {integrity: sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==}
@@ -5016,18 +4896,12 @@ packages:
4896 peerDependencies:
4897 vue: ^3.3.4
4898
5019 - vue-tsc@3.3.2:
5020 - resolution: {integrity: sha512-n7nQoA3YWW/eiDR8jMiv/uJvlg0uLGs+YgUrsTrf9EZaYSt3tuvMZb5V8+7Mvh/EH5pnY/hoVdgfjH+XcK+wwA==}
4899 + vue-tsc@3.3.3:
4900 + resolution: {integrity: sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ==}
4901 hasBin: true
4902 peerDependencies:
4903 typescript: '>=5.0.0'
4904
5025 - vue3-apexcharts@1.11.1:
5026 - resolution: {integrity: sha512-MbN3vg8bMG19wc0Lm1HkeQvODgLm56DgpIxtNUO0xpf/JCzYWVGE4jzXp2JISzy2s3Kul1yOxNQUYsLvKQ5L9g==}
5027 - peerDependencies:
5028 - apexcharts: '>=5.10.0'
5029 - vue: '>=3.0.0'
5030 -
4905 vue3-marquee@4.2.2:
4906 resolution: {integrity: sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==}
4907 engines: {node: '>=12'}
@@ -5117,9 +4991,9 @@ packages:
4991 wrappy@1.0.2:
4992 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
4993
5120 - wsl-utils@0.1.0:
5121 - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
5122 - engines: {node: '>=18'}
4994 + wsl-utils@0.3.1:
4995 + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
4996 + engines: {node: '>=20'}
4997
4998 xml-name-validator@4.0.0:
4999 resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
@@ -5197,128 +5071,128 @@ snapshots:
5071 dependencies:
5072 lodash: 4.17.21
5073
5200 - '@algolia/abtesting@1.18.1':
5074 + '@algolia/abtesting@1.19.0':
5075 dependencies:
5202 - '@algolia/client-common': 5.52.1
5203 - '@algolia/requester-browser-xhr': 5.52.1
5204 - '@algolia/requester-fetch': 5.52.1
5205 - '@algolia/requester-node-http': 5.52.1
5076 + '@algolia/client-common': 5.53.0
5077 + '@algolia/requester-browser-xhr': 5.53.0
5078 + '@algolia/requester-fetch': 5.53.0
5079 + '@algolia/requester-node-http': 5.53.0
5080
5207 - '@algolia/client-abtesting@5.52.1':
5081 + '@algolia/client-abtesting@5.53.0':
5082 dependencies:
5209 - '@algolia/client-common': 5.52.1
5210 - '@algolia/requester-browser-xhr': 5.52.1
5211 - '@algolia/requester-fetch': 5.52.1
5212 - '@algolia/requester-node-http': 5.52.1
5083 + '@algolia/client-common': 5.53.0
5084 + '@algolia/requester-browser-xhr': 5.53.0
5085 + '@algolia/requester-fetch': 5.53.0
5086 + '@algolia/requester-node-http': 5.53.0
5087
5214 - '@algolia/client-analytics@5.52.1':
5088 + '@algolia/client-analytics@5.53.0':
5089 dependencies:
5216 - '@algolia/client-common': 5.52.1
5217 - '@algolia/requester-browser-xhr': 5.52.1
5218 - '@algolia/requester-fetch': 5.52.1
5219 - '@algolia/requester-node-http': 5.52.1
5090 + '@algolia/client-common': 5.53.0
5091 + '@algolia/requester-browser-xhr': 5.53.0
5092 + '@algolia/requester-fetch': 5.53.0
5093 + '@algolia/requester-node-http': 5.53.0
5094
5221 - '@algolia/client-common@5.52.1': {}
5095 + '@algolia/client-common@5.53.0': {}
5096
5223 - '@algolia/client-insights@5.52.1':
5097 + '@algolia/client-insights@5.53.0':
5098 dependencies:
5225 - '@algolia/client-common': 5.52.1
5226 - '@algolia/requester-browser-xhr': 5.52.1
5227 - '@algolia/requester-fetch': 5.52.1
5228 - '@algolia/requester-node-http': 5.52.1
5099 + '@algolia/client-common': 5.53.0
5100 + '@algolia/requester-browser-xhr': 5.53.0
5101 + '@algolia/requester-fetch': 5.53.0
5102 + '@algolia/requester-node-http': 5.53.0
5103
5230 - '@algolia/client-personalization@5.52.1':
5104 + '@algolia/client-personalization@5.53.0':
5105 dependencies:
5232 - '@algolia/client-common': 5.52.1
5233 - '@algolia/requester-browser-xhr': 5.52.1
5234 - '@algolia/requester-fetch': 5.52.1
5235 - '@algolia/requester-node-http': 5.52.1
5106 + '@algolia/client-common': 5.53.0
5107 + '@algolia/requester-browser-xhr': 5.53.0
5108 + '@algolia/requester-fetch': 5.53.0
5109 + '@algolia/requester-node-http': 5.53.0
5110
5237 - '@algolia/client-query-suggestions@5.52.1':
5111 + '@algolia/client-query-suggestions@5.53.0':
5112 dependencies:
5239 - '@algolia/client-common': 5.52.1
5240 - '@algolia/requester-browser-xhr': 5.52.1
5241 - '@algolia/requester-fetch': 5.52.1
5242 - '@algolia/requester-node-http': 5.52.1
5113 + '@algolia/client-common': 5.53.0
5114 + '@algolia/requester-browser-xhr': 5.53.0
5115 + '@algolia/requester-fetch': 5.53.0
5116 + '@algolia/requester-node-http': 5.53.0
5117
5244 - '@algolia/client-search@5.52.1':
5118 + '@algolia/client-search@5.53.0':
5119 dependencies:
5246 - '@algolia/client-common': 5.52.1
5247 - '@algolia/requester-browser-xhr': 5.52.1
5248 - '@algolia/requester-fetch': 5.52.1
5249 - '@algolia/requester-node-http': 5.52.1
5120 + '@algolia/client-common': 5.53.0
5121 + '@algolia/requester-browser-xhr': 5.53.0
5122 + '@algolia/requester-fetch': 5.53.0
5123 + '@algolia/requester-node-http': 5.53.0
5124
5251 - '@algolia/ingestion@1.52.1':
5125 + '@algolia/ingestion@1.53.0':
5126 dependencies:
5253 - '@algolia/client-common': 5.52.1
5254 - '@algolia/requester-browser-xhr': 5.52.1
5255 - '@algolia/requester-fetch': 5.52.1
5256 - '@algolia/requester-node-http': 5.52.1
5127 + '@algolia/client-common': 5.53.0
5128 + '@algolia/requester-browser-xhr': 5.53.0
5129 + '@algolia/requester-fetch': 5.53.0
5130 + '@algolia/requester-node-http': 5.53.0
5131
5258 - '@algolia/monitoring@1.52.1':
5132 + '@algolia/monitoring@1.53.0':
5133 dependencies:
5260 - '@algolia/client-common': 5.52.1
5261 - '@algolia/requester-browser-xhr': 5.52.1
5262 - '@algolia/requester-fetch': 5.52.1
5263 - '@algolia/requester-node-http': 5.52.1
5134 + '@algolia/client-common': 5.53.0
5135 + '@algolia/requester-browser-xhr': 5.53.0
5136 + '@algolia/requester-fetch': 5.53.0
5137 + '@algolia/requester-node-http': 5.53.0
5138
5265 - '@algolia/recommend@5.52.1':
5139 + '@algolia/recommend@5.53.0':
5140 dependencies:
5267 - '@algolia/client-common': 5.52.1
5268 - '@algolia/requester-browser-xhr': 5.52.1
5269 - '@algolia/requester-fetch': 5.52.1
5270 - '@algolia/requester-node-http': 5.52.1
5141 + '@algolia/client-common': 5.53.0
5142 + '@algolia/requester-browser-xhr': 5.53.0
5143 + '@algolia/requester-fetch': 5.53.0
5144 + '@algolia/requester-node-http': 5.53.0
5145
5272 - '@algolia/requester-browser-xhr@5.52.1':
5146 + '@algolia/requester-browser-xhr@5.53.0':
5147 dependencies:
5274 - '@algolia/client-common': 5.52.1
5148 + '@algolia/client-common': 5.53.0
5149
5276 - '@algolia/requester-fetch@5.52.1':
5150 + '@algolia/requester-fetch@5.53.0':
5151 dependencies:
5278 - '@algolia/client-common': 5.52.1
5152 + '@algolia/client-common': 5.53.0
5153
5280 - '@algolia/requester-node-http@5.52.1':
5154 + '@algolia/requester-node-http@5.53.0':
5155 dependencies:
5282 - '@algolia/client-common': 5.52.1
5156 + '@algolia/client-common': 5.53.0
5157
5284 - '@antfu/eslint-config@9.0.0(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))':
5158 + '@antfu/eslint-config@9.0.0(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))':
5159 dependencies:
5160 '@antfu/install-pkg': 1.1.0
5287 - '@clack/prompts': 1.4.0
5288 - '@e18e/eslint-plugin': 0.4.1(eslint@10.4.0(jiti@2.7.0))
5289 - '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.4.0(jiti@2.7.0))
5161 + '@clack/prompts': 1.5.0
5162 + '@e18e/eslint-plugin': 0.4.1(eslint@10.4.1(jiti@2.7.0))
5163 + '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.4.1(jiti@2.7.0))
5164 '@eslint/markdown': 8.0.2
5291 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.0(jiti@2.7.0))
5292 - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5293 - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5294 - '@vitest/eslint-plugin': 1.6.18(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))
5295 - ansis: 4.3.0
5165 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.1(jiti@2.7.0))
5166 + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5167 + '@typescript-eslint/parser': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5168 + '@vitest/eslint-plugin': 1.6.19(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))
5169 + ansis: 4.3.1
5170 cac: 7.0.0
5297 - eslint: 10.4.0(jiti@2.7.0)
5298 - eslint-config-flat-gitignore: 2.3.0(eslint@10.4.0(jiti@2.7.0))
5171 + eslint: 10.4.1(jiti@2.7.0)
5172 + eslint-config-flat-gitignore: 2.3.0(eslint@10.4.1(jiti@2.7.0))
5173 eslint-flat-config-utils: 3.2.0
5300 - eslint-merge-processors: 2.0.0(eslint@10.4.0(jiti@2.7.0))
5301 - eslint-plugin-antfu: 3.2.3(eslint@10.4.0(jiti@2.7.0))
5302 - eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))
5303 - eslint-plugin-import-lite: 0.6.0(eslint@10.4.0(jiti@2.7.0))
5304 - eslint-plugin-jsdoc: 62.9.0(eslint@10.4.0(jiti@2.7.0))
5305 - eslint-plugin-jsonc: 3.1.2(eslint@10.4.0(jiti@2.7.0))
5306 - eslint-plugin-n: 18.0.1(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5174 + eslint-merge-processors: 2.0.0(eslint@10.4.1(jiti@2.7.0))
5175 + eslint-plugin-antfu: 3.2.3(eslint@10.4.1(jiti@2.7.0))
5176 + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))
5177 + eslint-plugin-import-lite: 0.6.0(eslint@10.4.1(jiti@2.7.0))
5178 + eslint-plugin-jsdoc: 62.9.0(eslint@10.4.1(jiti@2.7.0))
5179 + eslint-plugin-jsonc: 3.2.0(eslint@10.4.1(jiti@2.7.0))
5180 + eslint-plugin-n: 18.0.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5181 eslint-plugin-no-only-tests: 3.4.0
5308 - eslint-plugin-perfectionist: 5.9.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5309 - eslint-plugin-pnpm: 1.6.1(eslint@10.4.0(jiti@2.7.0))
5310 - eslint-plugin-regexp: 3.1.0(eslint@10.4.0(jiti@2.7.0))
5311 - eslint-plugin-toml: 1.3.1(eslint@10.4.0(jiti@2.7.0))
5312 - eslint-plugin-unicorn: 64.0.0(eslint@10.4.0(jiti@2.7.0))
5313 - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))
5314 - eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.0(jiti@2.7.0)))(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.0(jiti@2.7.0)))
5315 - eslint-plugin-yml: 3.3.2(eslint@10.4.0(jiti@2.7.0))
5316 - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.35)(eslint@10.4.0(jiti@2.7.0))
5182 + eslint-plugin-perfectionist: 5.9.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
5183 + eslint-plugin-pnpm: 1.6.1(eslint@10.4.1(jiti@2.7.0))
5184 + eslint-plugin-regexp: 3.1.0(eslint@10.4.1(jiti@2.7.0))
5185 + eslint-plugin-toml: 1.4.0(eslint@10.4.1(jiti@2.7.0))
5186 + eslint-plugin-unicorn: 64.0.0(eslint@10.4.1(jiti@2.7.0))
5187 + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))
5188 + eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.7.0)))(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.1(jiti@2.7.0)))
5189 + eslint-plugin-yml: 3.4.0(eslint@10.4.1(jiti@2.7.0))
5190 + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0))
5191 globals: 17.6.0
5192 local-pkg: 1.2.1
5193 parse-gitignore: 2.0.0
5194 toml-eslint-parser: 1.0.3
5321 - vue-eslint-parser: 10.4.0(eslint@10.4.0(jiti@2.7.0))
5195 + vue-eslint-parser: 10.4.0(eslint@10.4.1(jiti@2.7.0))
5196 yaml-eslint-parser: 2.0.0
5197 transitivePeerDependencies:
5198 - '@eslint/json'
@@ -5335,14 +5209,14 @@ snapshots:
5209 '@antfu/install-pkg@1.1.0':
5210 dependencies:
5211 package-manager-detector: 1.6.0
5338 - tinyexec: 1.2.2
5212 + tinyexec: 1.2.4
5213
5214 '@antfu/ni@30.1.0':
5215 dependencies:
5216 fzf: 0.5.2
5217 package-manager-detector: 1.6.0
5344 - tinyexec: 1.2.2
5345 - tinyglobby: 0.2.16
5218 + tinyexec: 1.2.4
5219 + tinyglobby: 0.2.17
5220
5221 '@asamuzakjp/css-color@5.1.11':
5222 dependencies:
@@ -5583,14 +5457,14 @@ snapshots:
5457 dependencies:
5458 css-tree: 3.2.1
5459
5586 - '@clack/core@1.3.1':
5460 + '@clack/core@1.4.0':
5461 dependencies:
5462 fast-wrap-ansi: 0.2.2
5463 sisteransi: 1.0.5
5464
5591 - '@clack/prompts@1.4.0':
5465 + '@clack/prompts@1.5.0':
5466 dependencies:
5593 - '@clack/core': 1.3.1
5467 + '@clack/core': 1.4.0
5468 fast-string-width: 3.0.2
5469 fast-wrap-ansi: 0.2.2
5470 sisteransi: 1.0.5
@@ -5702,13 +5576,13 @@ snapshots:
5576
5577 '@csstools/css-tokenizer@4.0.0': {}
5578
5705 - '@e18e/eslint-plugin@0.4.1(eslint@10.4.0(jiti@2.7.0))':
5579 + '@e18e/eslint-plugin@0.4.1(eslint@10.4.1(jiti@2.7.0))':
5580 dependencies:
5581 empathic: 2.0.1
5582 module-replacements: 3.0.0-beta.7
5583 semver: 7.8.1
5584 optionalDependencies:
5711 - eslint: 10.4.0(jiti@2.7.0)
5585 + eslint: 10.4.1(jiti@2.7.0)
5586
5587 '@emnapi/core@1.10.0':
5588 dependencies:
@@ -5760,19 +5634,19 @@ snapshots:
5634
5635 '@emotion/memoize@0.9.0': {}
5636
5763 - '@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6)':
5637 + '@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7)':
5638 dependencies:
5639 '@babel/runtime': 7.29.7
5640 '@emotion/babel-plugin': 11.13.5
5641 '@emotion/cache': 11.14.0
5642 '@emotion/serialize': 1.3.3
5769 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6)
5643 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7)
5644 '@emotion/utils': 1.4.2
5645 '@emotion/weak-memoize': 0.4.0
5646 hoist-non-react-statics: 3.3.2
5773 - react: 19.2.6
5647 + react: 19.2.7
5648 optionalDependencies:
5775 - '@types/react': 19.2.15
5649 + '@types/react': 19.2.16
5650 transitivePeerDependencies:
5651 - supports-color
5652
@@ -5786,26 +5660,26 @@ snapshots:
5660
5661 '@emotion/sheet@1.4.0': {}
5662
5789 - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)':
5663 + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)':
5664 dependencies:
5665 '@babel/runtime': 7.29.7
5666 '@emotion/babel-plugin': 11.13.5
5667 '@emotion/is-prop-valid': 1.4.0
5794 - '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6)
5668 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7)
5669 '@emotion/serialize': 1.3.3
5796 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6)
5670 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7)
5671 '@emotion/utils': 1.4.2
5798 - react: 19.2.6
5672 + react: 19.2.7
5673 optionalDependencies:
5800 - '@types/react': 19.2.15
5674 + '@types/react': 19.2.16
5675 transitivePeerDependencies:
5676 - supports-color
5677
5678 '@emotion/unitless@0.10.0': {}
5679
5806 - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.6)':
5680 + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.7)':
5681 dependencies:
5808 - react: 19.2.6
5682 + react: 19.2.7
5683
5684 '@emotion/utils@1.4.2': {}
5685
@@ -5829,24 +5703,24 @@ snapshots:
5703
5704 '@es-joy/resolve.exports@1.2.0': {}
5705
5832 - '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.4.0(jiti@2.7.0))':
5706 + '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@10.4.1(jiti@2.7.0))':
5707 dependencies:
5708 escape-string-regexp: 4.0.0
5835 - eslint: 10.4.0(jiti@2.7.0)
5709 + eslint: 10.4.1(jiti@2.7.0)
5710 ignore: 7.0.5
5711
5838 - '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))':
5712 + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.1(jiti@2.7.0))':
5713 dependencies:
5840 - eslint: 10.4.0(jiti@2.7.0)
5714 + eslint: 10.4.1(jiti@2.7.0)
5715 eslint-visitor-keys: 3.4.3
5716
5717 '@eslint-community/regexpp@4.12.2': {}
5718
5845 - '@eslint/compat@2.1.0(eslint@10.4.0(jiti@2.7.0))':
5719 + '@eslint/compat@2.1.0(eslint@10.4.1(jiti@2.7.0))':
5720 dependencies:
5721 '@eslint/core': 1.2.1
5722 optionalDependencies:
5849 - eslint: 10.4.0(jiti@2.7.0)
5723 + eslint: 10.4.1(jiti@2.7.0)
5724
5725 '@eslint/config-array@0.23.5':
5726 dependencies:
@@ -5871,7 +5745,7 @@ snapshots:
5745 '@eslint/markdown@8.0.2':
5746 dependencies:
5747 '@eslint/core': 1.2.1
5874 - '@eslint/plugin-kit': 0.7.1
5748 + '@eslint/plugin-kit': 0.7.2
5749 github-slugger: 2.0.0
5750 mdast-util-from-markdown: 2.0.3
5751 mdast-util-frontmatter: 2.0.1
@@ -5886,12 +5760,7 @@ snapshots:
5760
5761 '@eslint/object-schema@3.0.5': {}
5762
5889 - '@eslint/plugin-kit@0.6.1':
5890 - dependencies:
5891 - '@eslint/core': 1.2.1
5892 - levn: 0.4.1
5893 -
5894 - '@eslint/plugin-kit@0.7.1':
5763 + '@eslint/plugin-kit@0.7.2':
5764 dependencies:
5765 '@eslint/core': 1.2.1
5766 levn: 0.4.1
@@ -6060,37 +5929,37 @@ snapshots:
5929
5930 '@mui/core-downloads-tracker@9.0.1': {}
5931
6063 - '@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
5932 + '@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
5933 dependencies:
5934 '@babel/runtime': 7.29.7
5935 '@mui/core-downloads-tracker': 9.0.1
6067 - '@mui/system': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)
6068 - '@mui/types': 9.0.0(@types/react@19.2.15)
6069 - '@mui/utils': 9.0.1(@types/react@19.2.15)(react@19.2.6)
5936 + '@mui/system': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)
5937 + '@mui/types': 9.0.0(@types/react@19.2.16)
5938 + '@mui/utils': 9.0.1(@types/react@19.2.16)(react@19.2.7)
5939 '@popperjs/core': 2.11.8
6071 - '@types/react-transition-group': 4.4.12(@types/react@19.2.15)
5940 + '@types/react-transition-group': 4.4.12(@types/react@19.2.16)
5941 clsx: 2.1.1
5942 csstype: 3.2.3
5943 prop-types: 15.8.1
6075 - react: 19.2.6
6076 - react-dom: 19.2.6(react@19.2.6)
6077 - react-is: 19.2.6
6078 - react-transition-group: 4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
5944 + react: 19.2.7
5945 + react-dom: 19.2.7(react@19.2.7)
5946 + react-is: 19.2.7
5947 + react-transition-group: 4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
5948 optionalDependencies:
6080 - '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6)
6081 - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)
6082 - '@types/react': 19.2.15
5949 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7)
5950 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)
5951 + '@types/react': 19.2.16
5952
6084 - '@mui/private-theming@9.0.1(@types/react@19.2.15)(react@19.2.6)':
5953 + '@mui/private-theming@9.0.1(@types/react@19.2.16)(react@19.2.7)':
5954 dependencies:
5955 '@babel/runtime': 7.29.7
6087 - '@mui/utils': 9.0.1(@types/react@19.2.15)(react@19.2.6)
5956 + '@mui/utils': 9.0.1(@types/react@19.2.16)(react@19.2.7)
5957 prop-types: 15.8.1
6089 - react: 19.2.6
5958 + react: 19.2.7
5959 optionalDependencies:
6091 - '@types/react': 19.2.15
5960 + '@types/react': 19.2.16
5961
6093 - '@mui/styled-engine@9.0.0(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(react@19.2.6)':
5962 + '@mui/styled-engine@9.0.0(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(react@19.2.7)':
5963 dependencies:
5964 '@babel/runtime': 7.29.7
5965 '@emotion/cache': 11.14.0
@@ -6098,44 +5967,44 @@ snapshots:
5967 '@emotion/sheet': 1.4.0
5968 csstype: 3.2.3
5969 prop-types: 15.8.1
6101 - react: 19.2.6
5970 + react: 19.2.7
5971 optionalDependencies:
6103 - '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6)
6104 - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)
5972 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7)
5973 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)
5974
6106 - '@mui/system@9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)':
5975 + '@mui/system@9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)':
5976 dependencies:
5977 '@babel/runtime': 7.29.7
6109 - '@mui/private-theming': 9.0.1(@types/react@19.2.15)(react@19.2.6)
6110 - '@mui/styled-engine': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(react@19.2.6)
6111 - '@mui/types': 9.0.0(@types/react@19.2.15)
6112 - '@mui/utils': 9.0.1(@types/react@19.2.15)(react@19.2.6)
5978 + '@mui/private-theming': 9.0.1(@types/react@19.2.16)(react@19.2.7)
5979 + '@mui/styled-engine': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(react@19.2.7)
5980 + '@mui/types': 9.0.0(@types/react@19.2.16)
5981 + '@mui/utils': 9.0.1(@types/react@19.2.16)(react@19.2.7)
5982 clsx: 2.1.1
5983 csstype: 3.2.3
5984 prop-types: 15.8.1
6116 - react: 19.2.6
5985 + react: 19.2.7
5986 optionalDependencies:
6118 - '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6)
6119 - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)
6120 - '@types/react': 19.2.15
5987 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7)
5988 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)
5989 + '@types/react': 19.2.16
5990
6122 - '@mui/types@9.0.0(@types/react@19.2.15)':
5991 + '@mui/types@9.0.0(@types/react@19.2.16)':
5992 dependencies:
5993 '@babel/runtime': 7.29.7
5994 optionalDependencies:
6126 - '@types/react': 19.2.15
5995 + '@types/react': 19.2.16
5996
6128 - '@mui/utils@9.0.1(@types/react@19.2.15)(react@19.2.6)':
5997 + '@mui/utils@9.0.1(@types/react@19.2.16)(react@19.2.7)':
5998 dependencies:
5999 '@babel/runtime': 7.29.7
6131 - '@mui/types': 9.0.0(@types/react@19.2.15)
6000 + '@mui/types': 9.0.0(@types/react@19.2.16)
6001 '@types/prop-types': 15.7.15
6002 clsx: 2.1.1
6003 prop-types: 15.8.1
6135 - react: 19.2.6
6136 - react-is: 19.2.6
6004 + react: 19.2.7
6005 + react-is: 19.2.7
6006 optionalDependencies:
6138 - '@types/react': 19.2.15
6007 + '@types/react': 19.2.16
6008
6009 '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
6010 dependencies:
@@ -6144,7 +6013,7 @@ snapshots:
6013 '@tybys/wasm-util': 0.10.2
6014 optional: true
6015
6147 - '@nodable/entities@2.1.0': {}
6016 + '@nodable/entities@2.1.1': {}
6017
6018 '@nodelib/fs.scandir@2.1.5':
6019 dependencies:
@@ -6177,7 +6046,7 @@ snapshots:
6046 rc9: 3.0.1
6047 scule: 1.3.0
6048 semver: 7.8.1
6180 - tinyglobby: 0.2.16
6049 + tinyglobby: 0.2.17
6050 ufo: 1.6.4
6051 unctx: 2.5.0
6052 untyped: 2.0.0
@@ -6191,8 +6060,6 @@ snapshots:
6060
6061 '@oxc-project/types@0.130.0': {}
6062
6194 - '@oxc-project/types@0.133.0': {}
6195 -
6063 '@parcel/watcher-android-arm64@2.5.6':
6064 optional: true
6065
@@ -6257,7 +6124,7 @@ snapshots:
6124 '@pkgjs/parseargs@0.11.0':
6125 optional: true
6126
6260 - '@pkgr/core@0.2.9': {}
6127 + '@pkgr/core@0.3.6': {}
6128
6129 '@polka/url@1.0.0-next.29': {}
6130
@@ -6270,75 +6137,39 @@ snapshots:
6137 '@rolldown/binding-android-arm64@1.0.1':
6138 optional: true
6139
6273 - '@rolldown/binding-android-arm64@1.0.3':
6274 - optional: true
6275 -
6140 '@rolldown/binding-darwin-arm64@1.0.1':
6141 optional: true
6142
6279 - '@rolldown/binding-darwin-arm64@1.0.3':
6280 - optional: true
6281 -
6143 '@rolldown/binding-darwin-x64@1.0.1':
6144 optional: true
6145
6285 - '@rolldown/binding-darwin-x64@1.0.3':
6286 - optional: true
6287 -
6146 '@rolldown/binding-freebsd-x64@1.0.1':
6147 optional: true
6148
6291 - '@rolldown/binding-freebsd-x64@1.0.3':
6292 - optional: true
6293 -
6149 '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
6150 optional: true
6151
6297 - '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
6298 - optional: true
6299 -
6152 '@rolldown/binding-linux-arm64-gnu@1.0.1':
6153 optional: true
6154
6303 - '@rolldown/binding-linux-arm64-gnu@1.0.3':
6304 - optional: true
6305 -
6155 '@rolldown/binding-linux-arm64-musl@1.0.1':
6156 optional: true
6157
6309 - '@rolldown/binding-linux-arm64-musl@1.0.3':
6310 - optional: true
6311 -
6158 '@rolldown/binding-linux-ppc64-gnu@1.0.1':
6159 optional: true
6160
6315 - '@rolldown/binding-linux-ppc64-gnu@1.0.3':
6316 - optional: true
6317 -
6161 '@rolldown/binding-linux-s390x-gnu@1.0.1':
6162 optional: true
6163
6321 - '@rolldown/binding-linux-s390x-gnu@1.0.3':
6322 - optional: true
6323 -
6164 '@rolldown/binding-linux-x64-gnu@1.0.1':
6165 optional: true
6166
6327 - '@rolldown/binding-linux-x64-gnu@1.0.3':
6328 - optional: true
6329 -
6167 '@rolldown/binding-linux-x64-musl@1.0.1':
6168 optional: true
6169
6333 - '@rolldown/binding-linux-x64-musl@1.0.3':
6334 - optional: true
6335 -
6170 '@rolldown/binding-openharmony-arm64@1.0.1':
6171 optional: true
6172
6339 - '@rolldown/binding-openharmony-arm64@1.0.3':
6340 - optional: true
6341 -
6173 '@rolldown/binding-wasm32-wasi@1.0.1':
6174 dependencies:
6175 '@emnapi/core': 1.10.0
@@ -6346,28 +6177,15 @@ snapshots:
6177 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
6178 optional: true
6179
6349 - '@rolldown/binding-wasm32-wasi@1.0.3':
6350 - dependencies:
6351 - '@emnapi/core': 1.10.0
6352 - '@emnapi/runtime': 1.10.0
6353 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
6354 - optional: true
6355 -
6180 '@rolldown/binding-win32-arm64-msvc@1.0.1':
6181 optional: true
6182
6359 - '@rolldown/binding-win32-arm64-msvc@1.0.3':
6360 - optional: true
6361 -
6183 '@rolldown/binding-win32-x64-msvc@1.0.1':
6184 optional: true
6185
6365 - '@rolldown/binding-win32-x64-msvc@1.0.3':
6366 - optional: true
6367 -
6186 '@rolldown/pluginutils@1.0.1': {}
6187
6370 - '@rollup/rollup-linux-x64-gnu@4.60.4':
6188 + '@rollup/rollup-linux-x64-gnu@4.61.0':
6189 optional: true
6190
6191 '@shikijs/core@4.1.0':
@@ -6415,22 +6233,22 @@ snapshots:
6233
6234 '@shikijs/vscode-textmate@10.0.2': {}
6235
6418 - '@shuffleio/shuffle-mcps@0.0.32(@emotion/is-prop-valid@1.4.0)(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.15)(lucide-react@1.16.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react-router-dom@7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)':
6419 - dependencies:
6420 - '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6)
6421 - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)
6422 - '@mui/material': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6423 - algoliasearch: 5.52.1
6424 - framer-motion: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6425 - lucide-react: 1.16.0(react@19.2.6)
6426 - react: 19.2.6
6427 - react-dom: 19.2.6(react@19.2.6)
6428 - react-markdown: 10.1.0(@types/react@19.2.15)(react@19.2.6)
6429 - react-router-dom: 7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6430 - react18-json-view: 0.2.10(react@19.2.6)
6236 + '@shuffleio/shuffle-mcps@0.0.32(@emotion/is-prop-valid@1.4.0)(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react@19.2.16)(lucide-react@1.17.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react-router-dom@7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)':
6237 + dependencies:
6238 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7)
6239 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7)
6240 + '@mui/material': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react@19.2.7))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
6241 + algoliasearch: 5.53.0
6242 + framer-motion: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
6243 + lucide-react: 1.17.0(react@19.2.7)
6244 + react: 19.2.7
6245 + react-dom: 19.2.7(react@19.2.7)
6246 + react-markdown: 10.1.0(@types/react@19.2.16)(react@19.2.7)
6247 + react-router-dom: 7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
6248 + react18-json-view: 0.2.10(react@19.2.7)
6249 remark-breaks: 4.0.0
6250 remark-gfm: 4.0.1
6433 - sonner: 1.7.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6251 + sonner: 1.7.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
6252 transitivePeerDependencies:
6253 - '@emotion/is-prop-valid'
6254 - '@types/react'
@@ -6440,11 +6258,11 @@ snapshots:
6258
6259 '@standard-schema/spec@1.1.0': {}
6260
6443 - '@stylistic/eslint-plugin@5.10.0(eslint@10.4.0(jiti@2.7.0))':
6261 + '@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.7.0))':
6262 dependencies:
6445 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
6263 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
6264 '@typescript-eslint/types': 8.60.0
6447 - eslint: 10.4.0(jiti@2.7.0)
6265 + eslint: 10.4.1(jiti@2.7.0)
6266 eslint-visitor-keys: 4.2.1
6267 espree: 10.4.0
6268 estraverse: 5.3.0
@@ -6453,7 +6271,7 @@ snapshots:
6271 '@tailwindcss/node@4.3.0':
6272 dependencies:
6273 '@jridgewell/remapping': 2.3.5
6456 - enhanced-resolve: 5.22.0
6274 + enhanced-resolve: 5.22.1
6275 jiti: 2.7.0
6276 lightningcss: 1.32.0
6277 magic-string: 0.30.21
@@ -6511,12 +6329,12 @@ snapshots:
6329 '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0
6330 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0
6331
6514 - '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))':
6332 + '@tailwindcss/vite@4.3.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))':
6333 dependencies:
6334 '@tailwindcss/node': 4.3.0
6335 '@tailwindcss/oxide': 4.3.0
6336 tailwindcss: 4.3.0
6519 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6337 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6338
6339 '@tsconfig/node20@20.1.9': {}
6340
@@ -6566,7 +6384,7 @@ snapshots:
6384 '@types/node': 25.9.1
6385 '@types/tough-cookie': 4.0.5
6386 parse5: 8.0.1
6569 - undici-types: 7.26.0
6387 + undici-types: 7.27.0
6388
6389 '@types/jsesc@2.5.1': {}
6390
@@ -6613,15 +6431,15 @@ snapshots:
6431
6432 '@types/prop-types@15.7.15': {}
6433
6616 - '@types/react-dom@19.2.3(@types/react@19.2.15)':
6434 + '@types/react-dom@19.2.3(@types/react@19.2.16)':
6435 dependencies:
6618 - '@types/react': 19.2.15
6436 + '@types/react': 19.2.16
6437
6620 - '@types/react-transition-group@4.4.12(@types/react@19.2.15)':
6438 + '@types/react-transition-group@4.4.12(@types/react@19.2.16)':
6439 dependencies:
6622 - '@types/react': 19.2.15
6440 + '@types/react': 19.2.16
6441
6624 - '@types/react@19.2.15':
6442 + '@types/react@19.2.16':
6443 dependencies:
6444 csstype: 3.2.3
6445
@@ -6641,15 +6459,15 @@ snapshots:
6459
6460 '@types/web-bluetooth@0.0.21': {}
6461
6644 - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6462 + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
6463 dependencies:
6464 '@eslint-community/regexpp': 4.12.2
6647 - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6465 + '@typescript-eslint/parser': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6466 '@typescript-eslint/scope-manager': 8.60.0
6649 - '@typescript-eslint/type-utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6650 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6467 + '@typescript-eslint/type-utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6468 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6469 '@typescript-eslint/visitor-keys': 8.60.0
6652 - eslint: 10.4.0(jiti@2.7.0)
6470 + eslint: 10.4.1(jiti@2.7.0)
6471 ignore: 7.0.5
6472 natural-compare: 1.4.0
6473 ts-api-utils: 2.5.0(typescript@6.0.3)
@@ -6657,14 +6475,14 @@ snapshots:
6475 transitivePeerDependencies:
6476 - supports-color
6477
6660 - '@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6478 + '@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
6479 dependencies:
6480 '@typescript-eslint/scope-manager': 8.60.0
6481 '@typescript-eslint/types': 8.60.0
6482 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3)
6483 '@typescript-eslint/visitor-keys': 8.60.0
6484 debug: 4.4.3
6667 - eslint: 10.4.0(jiti@2.7.0)
6485 + eslint: 10.4.1(jiti@2.7.0)
6486 typescript: 6.0.3
6487 transitivePeerDependencies:
6488 - supports-color
@@ -6678,13 +6496,13 @@ snapshots:
6496 transitivePeerDependencies:
6497 - supports-color
6498
6681 - '@typescript-eslint/rule-tester@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6499 + '@typescript-eslint/rule-tester@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
6500 dependencies:
6683 - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6501 + '@typescript-eslint/parser': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6502 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3)
6685 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6503 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6504 ajv: 6.15.0
6687 - eslint: 10.4.0(jiti@2.7.0)
6505 + eslint: 10.4.1(jiti@2.7.0)
6506 json-stable-stringify-without-jsonify: 1.0.1
6507 lodash.merge: 4.6.2
6508 semver: 7.8.1
@@ -6701,13 +6519,13 @@ snapshots:
6519 dependencies:
6520 typescript: 6.0.3
6521
6704 - '@typescript-eslint/type-utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6522 + '@typescript-eslint/type-utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
6523 dependencies:
6524 '@typescript-eslint/types': 8.60.0
6525 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3)
6708 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6526 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6527 debug: 4.4.3
6710 - eslint: 10.4.0(jiti@2.7.0)
6528 + eslint: 10.4.1(jiti@2.7.0)
6529 ts-api-utils: 2.5.0(typescript@6.0.3)
6530 typescript: 6.0.3
6531 transitivePeerDependencies:
@@ -6724,19 +6542,19 @@ snapshots:
6542 debug: 4.4.3
6543 minimatch: 10.2.5
6544 semver: 7.8.1
6727 - tinyglobby: 0.2.16
6545 + tinyglobby: 0.2.17
6546 ts-api-utils: 2.5.0(typescript@6.0.3)
6547 typescript: 6.0.3
6548 transitivePeerDependencies:
6549 - supports-color
6550
6733 - '@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6551 + '@typescript-eslint/utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)':
6552 dependencies:
6735 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
6553 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
6554 '@typescript-eslint/scope-manager': 8.60.0
6555 '@typescript-eslint/types': 8.60.0
6556 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3)
6739 - eslint: 10.4.0(jiti@2.7.0)
6557 + eslint: 10.4.1(jiti@2.7.0)
6558 typescript: 6.0.3
6559 transitivePeerDependencies:
6560 - supports-color
@@ -6748,74 +6566,74 @@ snapshots:
6566
6567 '@ungap/structured-clone@1.3.1': {}
6568
6751 - '@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
6569 + '@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
6570 dependencies:
6571 '@babel/core': 7.29.7
6572 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
6573 '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
6574 '@rolldown/pluginutils': 1.0.1
6575 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7)
6758 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6576 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6577 vue: 3.5.35(typescript@6.0.3)
6578 transitivePeerDependencies:
6579 - supports-color
6580
6763 - '@vitejs/plugin-vue@6.0.7(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
6581 + '@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))':
6582 dependencies:
6583 '@rolldown/pluginutils': 1.0.1
6766 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6584 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6585 vue: 3.5.35(typescript@6.0.3)
6586
6769 - '@vitest/eslint-plugin@1.6.18(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))':
6587 + '@vitest/eslint-plugin@1.6.19(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)))':
6588 dependencies:
6589 '@typescript-eslint/scope-manager': 8.60.0
6772 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6773 - eslint: 10.4.0(jiti@2.7.0)
6590 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6591 + eslint: 10.4.1(jiti@2.7.0)
6592 optionalDependencies:
6775 - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6593 + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
6594 typescript: 6.0.3
6777 - vitest: 4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
6595 + vitest: 4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
6596 transitivePeerDependencies:
6597 - supports-color
6598
6781 - '@vitest/expect@4.1.7':
6599 + '@vitest/expect@4.1.8':
6600 dependencies:
6601 '@standard-schema/spec': 1.1.0
6602 '@types/chai': 5.2.3
6785 - '@vitest/spy': 4.1.7
6786 - '@vitest/utils': 4.1.7
6603 + '@vitest/spy': 4.1.8
6604 + '@vitest/utils': 4.1.8
6605 chai: 6.2.2
6606 tinyrainbow: 3.1.0
6607
6790 - '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))':
6608 + '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))':
6609 dependencies:
6792 - '@vitest/spy': 4.1.7
6610 + '@vitest/spy': 4.1.8
6611 estree-walker: 3.0.3
6612 magic-string: 0.30.21
6613 optionalDependencies:
6796 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6614 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
6615
6798 - '@vitest/pretty-format@4.1.7':
6616 + '@vitest/pretty-format@4.1.8':
6617 dependencies:
6618 tinyrainbow: 3.1.0
6619
6802 - '@vitest/runner@4.1.7':
6620 + '@vitest/runner@4.1.8':
6621 dependencies:
6804 - '@vitest/utils': 4.1.7
6622 + '@vitest/utils': 4.1.8
6623 pathe: 2.0.3
6624
6807 - '@vitest/snapshot@4.1.7':
6625 + '@vitest/snapshot@4.1.8':
6626 dependencies:
6809 - '@vitest/pretty-format': 4.1.7
6810 - '@vitest/utils': 4.1.7
6627 + '@vitest/pretty-format': 4.1.8
6628 + '@vitest/utils': 4.1.8
6629 magic-string: 0.30.21
6630 pathe: 2.0.3
6631
6814 - '@vitest/spy@4.1.7': {}
6632 + '@vitest/spy@4.1.8': {}
6633
6816 - '@vitest/utils@4.1.7':
6634 + '@vitest/utils@4.1.8':
6635 dependencies:
6818 - '@vitest/pretty-format': 4.1.7
6636 + '@vitest/pretty-format': 4.1.8
6637 convert-source-map: 2.0.0
6638 tinyrainbow: 3.1.0
6639
@@ -6855,7 +6673,7 @@ snapshots:
6673 '@babel/types': 7.29.7
6674 '@vue/babel-helper-vue-transform-on': 1.5.0
6675 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7)
6858 - '@vue/shared': 3.5.34
6676 + '@vue/shared': 3.5.35
6677 optionalDependencies:
6678 '@babel/core': 7.29.7
6679 transitivePeerDependencies:
@@ -6871,7 +6689,7 @@ snapshots:
6689 '@babel/types': 7.29.7
6690 '@vue/babel-helper-vue-transform-on': 2.0.1
6691 '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7)
6874 - '@vue/shared': 3.5.34
6692 + '@vue/shared': 3.5.35
6693 optionalDependencies:
6694 '@babel/core': 7.29.7
6695 transitivePeerDependencies:
@@ -6884,7 +6702,7 @@ snapshots:
6702 '@babel/helper-module-imports': 7.29.7
6703 '@babel/helper-plugin-utils': 7.29.7
6704 '@babel/parser': 7.29.7
6887 - '@vue/compiler-sfc': 3.5.34
6705 + '@vue/compiler-sfc': 3.5.35
6706 transitivePeerDependencies:
6707 - supports-color
6708
@@ -6895,18 +6713,10 @@ snapshots:
6713 '@babel/helper-module-imports': 7.29.7
6714 '@babel/helper-plugin-utils': 7.29.7
6715 '@babel/parser': 7.29.7
6898 - '@vue/compiler-sfc': 3.5.34
6716 + '@vue/compiler-sfc': 3.5.35
6717 transitivePeerDependencies:
6718 - supports-color
6719
6902 - '@vue/compiler-core@3.5.34':
6903 - dependencies:
6904 - '@babel/parser': 7.29.7
6905 - '@vue/shared': 3.5.34
6906 - entities: 7.0.1
6907 - estree-walker: 2.0.2
6908 - source-map-js: 1.2.1
6909 -
6720 '@vue/compiler-core@3.5.35':
6721 dependencies:
6722 '@babel/parser': 7.29.7
@@ -6915,28 +6725,11 @@ snapshots:
6725 estree-walker: 2.0.2
6726 source-map-js: 1.2.1
6727
6918 - '@vue/compiler-dom@3.5.34':
6919 - dependencies:
6920 - '@vue/compiler-core': 3.5.34
6921 - '@vue/shared': 3.5.34
6922 -
6728 '@vue/compiler-dom@3.5.35':
6729 dependencies:
6730 '@vue/compiler-core': 3.5.35
6731 '@vue/shared': 3.5.35
6732
6928 - '@vue/compiler-sfc@3.5.34':
6929 - dependencies:
6930 - '@babel/parser': 7.29.7
6931 - '@vue/compiler-core': 3.5.34
6932 - '@vue/compiler-dom': 3.5.34
6933 - '@vue/compiler-ssr': 3.5.34
6934 - '@vue/shared': 3.5.34
6935 - estree-walker: 2.0.2
6936 - magic-string: 0.30.21
6937 - postcss: 8.5.15
6938 - source-map-js: 1.2.1
6939 -
6733 '@vue/compiler-sfc@3.5.35':
6734 dependencies:
6735 '@babel/parser': 7.29.7
@@ -6949,11 +6742,6 @@ snapshots:
6742 postcss: 8.5.15
6743 source-map-js: 1.2.1
6744
6952 - '@vue/compiler-ssr@3.5.34':
6953 - dependencies:
6954 - '@vue/compiler-dom': 3.5.34
6955 - '@vue/shared': 3.5.34
6956 -
6745 '@vue/compiler-ssr@3.5.35':
6746 dependencies:
6747 '@vue/compiler-dom': 3.5.35
@@ -6998,11 +6786,11 @@ snapshots:
6786
6787 '@vue/devtools-shared@8.1.2': {}
6788
7001 - '@vue/language-core@3.3.2':
6789 + '@vue/language-core@3.3.3':
6790 dependencies:
6791 '@volar/language-core': 2.4.28
7004 - '@vue/compiler-dom': 3.5.34
7005 - '@vue/shared': 3.5.34
6792 + '@vue/compiler-dom': 3.5.35
6793 + '@vue/shared': 3.5.35
6794 alien-signals: 3.2.1
6795 muggle-string: 0.4.1
6796 path-browserify: 1.0.1
@@ -7030,8 +6818,6 @@ snapshots:
6818 '@vue/shared': 3.5.35
6819 vue: 3.5.35(typescript@6.0.3)
6820
7033 - '@vue/shared@3.5.34': {}
7034 -
6821 '@vue/shared@3.5.35': {}
6822
6823 '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.35)(@vue/server-renderer@3.5.35(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3))':
@@ -7039,7 +6825,7 @@ snapshots:
6825 '@vue/compiler-dom': 3.5.35
6826 js-beautify: 1.15.4
6827 vue: 3.5.35(typescript@6.0.3)
7042 - vue-component-type-helpers: 3.3.2
6828 + vue-component-type-helpers: 3.3.3
6829 optionalDependencies:
6830 '@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@6.0.3))
6831
@@ -7111,22 +6897,22 @@ snapshots:
6897 json-schema-traverse: 0.4.1
6898 uri-js: 4.4.1
6899
7114 - algoliasearch@5.52.1:
7115 - dependencies:
7116 - '@algolia/abtesting': 1.18.1
7117 - '@algolia/client-abtesting': 5.52.1
7118 - '@algolia/client-analytics': 5.52.1
7119 - '@algolia/client-common': 5.52.1
7120 - '@algolia/client-insights': 5.52.1
7121 - '@algolia/client-personalization': 5.52.1
7122 - '@algolia/client-query-suggestions': 5.52.1
7123 - '@algolia/client-search': 5.52.1
7124 - '@algolia/ingestion': 1.52.1
7125 - '@algolia/monitoring': 1.52.1
7126 - '@algolia/recommend': 5.52.1
7127 - '@algolia/requester-browser-xhr': 5.52.1
7128 - '@algolia/requester-fetch': 5.52.1
7129 - '@algolia/requester-node-http': 5.52.1
6900 + algoliasearch@5.53.0:
6901 + dependencies:
6902 + '@algolia/abtesting': 1.19.0
6903 + '@algolia/client-abtesting': 5.53.0
6904 + '@algolia/client-analytics': 5.53.0
6905 + '@algolia/client-common': 5.53.0
6906 + '@algolia/client-insights': 5.53.0
6907 + '@algolia/client-personalization': 5.53.0
6908 + '@algolia/client-query-suggestions': 5.53.0
6909 + '@algolia/client-search': 5.53.0
6910 + '@algolia/ingestion': 1.53.0
6911 + '@algolia/monitoring': 1.53.0
6912 + '@algolia/recommend': 5.53.0
6913 + '@algolia/requester-browser-xhr': 5.53.0
6914 + '@algolia/requester-fetch': 5.53.0
6915 + '@algolia/requester-node-http': 5.53.0
6916
6917 alien-signals@3.2.1: {}
6918
@@ -7140,9 +6926,7 @@ snapshots:
6926
6927 ansi-styles@6.2.3: {}
6928
7143 - ansis@4.3.0: {}
7144 -
7145 - apexcharts@5.13.0: {}
6929 + ansis@4.3.1: {}
6930
6931 are-docs-informative@0.0.2: {}
6932
@@ -7209,7 +6993,7 @@ snapshots:
6993
6994 balanced-match@4.0.4: {}
6995
7212 - baseline-browser-mapping@2.10.32: {}
6996 + baseline-browser-mapping@2.10.33: {}
6997
6998 bidi-js@1.0.3:
6999 dependencies:
@@ -7217,6 +7001,8 @@ snapshots:
7001
7002 birpc@2.9.0: {}
7003
7004 + birpc@4.0.0: {}
7005 +
7006 blamer@1.0.7:
7007 dependencies:
7008 execa: 4.1.0
@@ -7226,7 +7012,7 @@ snapshots:
7012
7013 boolbase@1.0.0: {}
7014
7229 - brace-expansion@1.1.14:
7015 + brace-expansion@1.1.15:
7016 dependencies:
7017 balanced-match: 1.0.2
7018 concat-map: 0.0.1
@@ -7245,9 +7031,9 @@ snapshots:
7031
7032 browserslist@4.28.2:
7033 dependencies:
7248 - baseline-browser-mapping: 2.10.32
7034 + baseline-browser-mapping: 2.10.33
7035 caniuse-lite: 1.0.30001793
7250 - electron-to-chromium: 1.5.361
7036 + electron-to-chromium: 1.5.364
7037 node-releases: 2.0.46
7038 update-browserslist-db: 1.2.3(browserslist@4.28.2)
7039
@@ -7496,11 +7282,11 @@ snapshots:
7282 transitivePeerDependencies:
7283 - '@noble/hashes'
7284
7499 - date-fns-tz@3.2.0(date-fns@4.3.0):
7285 + date-fns-tz@3.2.0(date-fns@4.4.0):
7286 dependencies:
7501 - date-fns: 4.3.0
7287 + date-fns: 4.4.0
7288
7503 - date-fns@4.3.0: {}
7289 + date-fns@4.4.0: {}
7290
7291 dayjs@1.11.21: {}
7292
@@ -7537,7 +7323,7 @@ snapshots:
7323 dependencies:
7324 '@babel/parser': 7.29.7
7325 '@babel/traverse': 7.29.7
7540 - '@vue/compiler-sfc': 3.5.34
7326 + '@vue/compiler-sfc': 3.5.35
7327 callsite: 1.0.0
7328 camelcase: 6.3.0
7329 cosmiconfig: 7.1.0
@@ -7629,7 +7415,7 @@ snapshots:
7415 minimatch: 9.0.9
7416 semver: 7.8.1
7417
7632 - electron-to-chromium@1.5.361: {}
7418 + electron-to-chromium@1.5.364: {}
7419
7420 emoji-regex@8.0.0: {}
7421
@@ -7641,7 +7427,7 @@ snapshots:
7427 dependencies:
7428 once: 1.4.0
7429
7644 - enhanced-resolve@5.22.0:
7430 + enhanced-resolve@5.22.1:
7431 dependencies:
7432 graceful-fs: 4.2.11
7433 tapable: 2.3.3
@@ -7676,7 +7462,7 @@ snapshots:
7462 es-errors: 1.3.0
7463 get-intrinsic: 1.3.0
7464 has-tostringtag: 1.0.2
7679 - hasown: 2.0.3
7465 + hasown: 2.0.4
7466
7467 escalade@3.2.0: {}
7468
@@ -7686,55 +7472,55 @@ snapshots:
7472
7473 escape-string-regexp@5.0.0: {}
7474
7689 - eslint-compat-utils@0.5.1(eslint@10.4.0(jiti@2.7.0)):
7475 + eslint-compat-utils@0.5.1(eslint@10.4.1(jiti@2.7.0)):
7476 dependencies:
7691 - eslint: 10.4.0(jiti@2.7.0)
7477 + eslint: 10.4.1(jiti@2.7.0)
7478 semver: 7.8.1
7479
7694 - eslint-config-flat-gitignore@2.3.0(eslint@10.4.0(jiti@2.7.0)):
7480 + eslint-config-flat-gitignore@2.3.0(eslint@10.4.1(jiti@2.7.0)):
7481 dependencies:
7696 - '@eslint/compat': 2.1.0(eslint@10.4.0(jiti@2.7.0))
7697 - eslint: 10.4.0(jiti@2.7.0)
7482 + '@eslint/compat': 2.1.0(eslint@10.4.1(jiti@2.7.0))
7483 + eslint: 10.4.1(jiti@2.7.0)
7484
7485 eslint-flat-config-utils@3.2.0:
7486 dependencies:
7487 '@eslint/config-helpers': 0.5.5
7488 pathe: 2.0.3
7489
7704 - eslint-json-compat-utils@0.2.3(eslint@10.4.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0):
7490 + eslint-json-compat-utils@0.2.3(eslint@10.4.1(jiti@2.7.0))(jsonc-eslint-parser@3.1.0):
7491 dependencies:
7706 - eslint: 10.4.0(jiti@2.7.0)
7492 + eslint: 10.4.1(jiti@2.7.0)
7493 esquery: 1.7.0
7494 jsonc-eslint-parser: 3.1.0
7495
7710 - eslint-merge-processors@2.0.0(eslint@10.4.0(jiti@2.7.0)):
7496 + eslint-merge-processors@2.0.0(eslint@10.4.1(jiti@2.7.0)):
7497 dependencies:
7712 - eslint: 10.4.0(jiti@2.7.0)
7498 + eslint: 10.4.1(jiti@2.7.0)
7499
7714 - eslint-plugin-antfu@3.2.3(eslint@10.4.0(jiti@2.7.0)):
7500 + eslint-plugin-antfu@3.2.3(eslint@10.4.1(jiti@2.7.0)):
7501 dependencies:
7716 - eslint: 10.4.0(jiti@2.7.0)
7502 + eslint: 10.4.1(jiti@2.7.0)
7503
7718 - eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0)):
7504 + eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3))(@typescript-eslint/utils@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0)):
7505 dependencies:
7506 '@es-joy/jsdoccomment': 0.84.0
7721 - '@typescript-eslint/rule-tester': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
7507 + '@typescript-eslint/rule-tester': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
7508 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3)
7723 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
7724 - eslint: 10.4.0(jiti@2.7.0)
7509 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
7510 + eslint: 10.4.1(jiti@2.7.0)
7511
7726 - eslint-plugin-es-x@7.8.0(eslint@10.4.0(jiti@2.7.0)):
7512 + eslint-plugin-es-x@7.8.0(eslint@10.4.1(jiti@2.7.0)):
7513 dependencies:
7728 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7514 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7515 '@eslint-community/regexpp': 4.12.2
7730 - eslint: 10.4.0(jiti@2.7.0)
7731 - eslint-compat-utils: 0.5.1(eslint@10.4.0(jiti@2.7.0))
7516 + eslint: 10.4.1(jiti@2.7.0)
7517 + eslint-compat-utils: 0.5.1(eslint@10.4.1(jiti@2.7.0))
7518
7733 - eslint-plugin-import-lite@0.6.0(eslint@10.4.0(jiti@2.7.0)):
7519 + eslint-plugin-import-lite@0.6.0(eslint@10.4.1(jiti@2.7.0)):
7520 dependencies:
7735 - eslint: 10.4.0(jiti@2.7.0)
7521 + eslint: 10.4.1(jiti@2.7.0)
7522
7737 - eslint-plugin-jsdoc@62.9.0(eslint@10.4.0(jiti@2.7.0)):
7523 + eslint-plugin-jsdoc@62.9.0(eslint@10.4.1(jiti@2.7.0)):
7524 dependencies:
7525 '@es-joy/jsdoccomment': 0.86.0
7526 '@es-joy/resolve.exports': 1.2.0
@@ -7742,7 +7528,7 @@ snapshots:
7528 comment-parser: 1.4.6
7529 debug: 4.4.3
7530 escape-string-regexp: 4.0.0
7745 - eslint: 10.4.0(jiti@2.7.0)
7531 + eslint: 10.4.1(jiti@2.7.0)
7532 espree: 11.2.0
7533 esquery: 1.7.0
7534 html-entities: 2.6.0
@@ -7754,27 +7540,27 @@ snapshots:
7540 transitivePeerDependencies:
7541 - supports-color
7542
7757 - eslint-plugin-jsonc@3.1.2(eslint@10.4.0(jiti@2.7.0)):
7543 + eslint-plugin-jsonc@3.2.0(eslint@10.4.1(jiti@2.7.0)):
7544 dependencies:
7759 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7545 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7546 '@eslint/core': 1.2.1
7761 - '@eslint/plugin-kit': 0.6.1
7547 + '@eslint/plugin-kit': 0.7.2
7548 '@ota-meshi/ast-token-store': 0.3.0
7549 diff-sequences: 29.6.3
7764 - eslint: 10.4.0(jiti@2.7.0)
7765 - eslint-json-compat-utils: 0.2.3(eslint@10.4.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0)
7550 + eslint: 10.4.1(jiti@2.7.0)
7551 + eslint-json-compat-utils: 0.2.3(eslint@10.4.1(jiti@2.7.0))(jsonc-eslint-parser@3.1.0)
7552 jsonc-eslint-parser: 3.1.0
7553 natural-compare: 1.4.0
7768 - synckit: 0.11.12
7554 + synckit: 0.11.13
7555 transitivePeerDependencies:
7556 - '@eslint/json'
7557
7772 - eslint-plugin-n@18.0.1(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3):
7558 + eslint-plugin-n@18.0.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3):
7559 dependencies:
7774 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7775 - enhanced-resolve: 5.22.0
7776 - eslint: 10.4.0(jiti@2.7.0)
7777 - eslint-plugin-es-x: 7.8.0(eslint@10.4.0(jiti@2.7.0))
7560 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7561 + enhanced-resolve: 5.22.1
7562 + eslint: 10.4.1(jiti@2.7.0)
7563 + eslint-plugin-es-x: 7.8.0(eslint@10.4.1(jiti@2.7.0))
7564 get-tsconfig: 4.14.0
7565 globals: 15.15.0
7566 globrex: 0.1.2
@@ -7785,57 +7571,57 @@ snapshots:
7571
7572 eslint-plugin-no-only-tests@3.4.0: {}
7573
7788 - eslint-plugin-perfectionist@5.9.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3):
7574 + eslint-plugin-perfectionist@5.9.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3):
7575 dependencies:
7790 - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
7791 - eslint: 10.4.0(jiti@2.7.0)
7576 + '@typescript-eslint/utils': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
7577 + eslint: 10.4.1(jiti@2.7.0)
7578 natural-orderby: 5.0.0
7579 transitivePeerDependencies:
7580 - supports-color
7581 - typescript
7582
7797 - eslint-plugin-pnpm@1.6.1(eslint@10.4.0(jiti@2.7.0)):
7583 + eslint-plugin-pnpm@1.6.1(eslint@10.4.1(jiti@2.7.0)):
7584 dependencies:
7585 empathic: 2.0.1
7800 - eslint: 10.4.0(jiti@2.7.0)
7586 + eslint: 10.4.1(jiti@2.7.0)
7587 jsonc-eslint-parser: 3.1.0
7588 pathe: 2.0.3
7589 pnpm-workspace-yaml: 1.6.1
7804 - tinyglobby: 0.2.16
7590 + tinyglobby: 0.2.17
7591 yaml: 2.9.0
7592 yaml-eslint-parser: 2.0.0
7593
7808 - eslint-plugin-regexp@3.1.0(eslint@10.4.0(jiti@2.7.0)):
7594 + eslint-plugin-regexp@3.1.0(eslint@10.4.1(jiti@2.7.0)):
7595 dependencies:
7810 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7596 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7597 '@eslint-community/regexpp': 4.12.2
7598 comment-parser: 1.4.7
7813 - eslint: 10.4.0(jiti@2.7.0)
7599 + eslint: 10.4.1(jiti@2.7.0)
7600 jsdoc-type-pratt-parser: 7.2.0
7601 refa: 0.12.1
7602 regexp-ast-analysis: 0.7.1
7603 scslre: 0.3.0
7604
7819 - eslint-plugin-toml@1.3.1(eslint@10.4.0(jiti@2.7.0)):
7605 + eslint-plugin-toml@1.4.0(eslint@10.4.1(jiti@2.7.0)):
7606 dependencies:
7607 '@eslint/core': 1.2.1
7822 - '@eslint/plugin-kit': 0.6.1
7608 + '@eslint/plugin-kit': 0.7.2
7609 '@ota-meshi/ast-token-store': 0.3.0
7610 debug: 4.4.3
7825 - eslint: 10.4.0(jiti@2.7.0)
7611 + eslint: 10.4.1(jiti@2.7.0)
7612 toml-eslint-parser: 1.0.3
7613 transitivePeerDependencies:
7614 - supports-color
7615
7830 - eslint-plugin-unicorn@64.0.0(eslint@10.4.0(jiti@2.7.0)):
7616 + eslint-plugin-unicorn@64.0.0(eslint@10.4.1(jiti@2.7.0)):
7617 dependencies:
7618 '@babel/helper-validator-identifier': 7.29.7
7833 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7619 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7620 change-case: 5.4.4
7621 ci-info: 4.4.0
7622 clean-regexp: 1.0.0
7623 core-js-compat: 3.49.0
7838 - eslint: 10.4.0(jiti@2.7.0)
7624 + eslint: 10.4.1(jiti@2.7.0)
7625 find-up-simple: 1.0.1
7626 globals: 17.6.0
7627 indent-string: 5.0.0
@@ -7847,41 +7633,41 @@ snapshots:
7633 semver: 7.8.1
7634 strip-indent: 4.1.1
7635
7850 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0)):
7636 + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0)):
7637 dependencies:
7852 - eslint: 10.4.0(jiti@2.7.0)
7638 + eslint: 10.4.1(jiti@2.7.0)
7639 optionalDependencies:
7854 - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
7640 + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
7641
7856 - eslint-plugin-vue@10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.0(jiti@2.7.0)))(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.0(jiti@2.7.0))):
7642 + eslint-plugin-vue@10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.7.0)))(@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.1(jiti@2.7.0))):
7643 dependencies:
7858 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7859 - eslint: 10.4.0(jiti@2.7.0)
7644 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7645 + eslint: 10.4.1(jiti@2.7.0)
7646 natural-compare: 1.4.0
7647 nth-check: 2.1.1
7648 postcss-selector-parser: 7.1.1
7649 semver: 7.8.1
7864 - vue-eslint-parser: 10.4.0(eslint@10.4.0(jiti@2.7.0))
7650 + vue-eslint-parser: 10.4.0(eslint@10.4.1(jiti@2.7.0))
7651 xml-name-validator: 4.0.0
7652 optionalDependencies:
7867 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.0(jiti@2.7.0))
7868 - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
7653 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.1(jiti@2.7.0))
7654 + '@typescript-eslint/parser': 8.60.0(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)
7655
7870 - eslint-plugin-yml@3.3.2(eslint@10.4.0(jiti@2.7.0)):
7656 + eslint-plugin-yml@3.4.0(eslint@10.4.1(jiti@2.7.0)):
7657 dependencies:
7658 '@eslint/core': 1.2.1
7873 - '@eslint/plugin-kit': 0.7.1
7659 + '@eslint/plugin-kit': 0.7.2
7660 '@ota-meshi/ast-token-store': 0.3.0
7661 diff-sequences: 29.6.3
7662 escape-string-regexp: 5.0.0
7877 - eslint: 10.4.0(jiti@2.7.0)
7663 + eslint: 10.4.1(jiti@2.7.0)
7664 natural-compare: 1.4.0
7665 yaml-eslint-parser: 2.0.0
7666
7881 - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.35)(eslint@10.4.0(jiti@2.7.0)):
7667 + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.35)(eslint@10.4.1(jiti@2.7.0)):
7668 dependencies:
7669 '@vue/compiler-sfc': 3.5.35
7884 - eslint: 10.4.0(jiti@2.7.0)
7670 + eslint: 10.4.1(jiti@2.7.0)
7671
7672 eslint-scope@9.1.2:
7673 dependencies:
@@ -7896,14 +7682,14 @@ snapshots:
7682
7683 eslint-visitor-keys@5.0.1: {}
7684
7899 - eslint@10.4.0(jiti@2.7.0):
7685 + eslint@10.4.1(jiti@2.7.0):
7686 dependencies:
7901 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
7687 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0))
7688 '@eslint-community/regexpp': 4.12.2
7689 '@eslint/config-array': 0.23.5
7690 '@eslint/config-helpers': 0.6.0
7691 '@eslint/core': 1.2.1
7906 - '@eslint/plugin-kit': 0.7.1
7692 + '@eslint/plugin-kit': 0.7.2
7693 '@humanfs/node': 0.16.8
7694 '@humanwhocodes/module-importer': 1.0.1
7695 '@humanwhocodes/retry': 0.4.3
@@ -8036,7 +7822,7 @@ snapshots:
7822
7823 fast-xml-parser@5.8.0:
7824 dependencies:
8039 - '@nodable/entities': 2.1.0
7825 + '@nodable/entities': 2.1.1
7826 fast-xml-builder: 1.2.0
7827 path-expression-matcher: 1.5.0
7828 strnum: 2.3.0
@@ -8103,20 +7889,20 @@ snapshots:
7889 asynckit: 0.4.0
7890 combined-stream: 1.0.8
7891 es-set-tostringtag: 2.1.0
8106 - hasown: 2.0.3
7892 + hasown: 2.0.4
7893 mime-types: 2.1.35
7894
7895 format@0.2.2: {}
7896
8111 - framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
7897 + framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
7898 dependencies:
7899 motion-dom: 11.18.1
7900 motion-utils: 11.18.1
7901 tslib: 2.8.1
7902 optionalDependencies:
7903 '@emotion/is-prop-valid': 1.4.0
8118 - react: 19.2.6
8119 - react-dom: 19.2.6(react@19.2.6)
7904 + react: 19.2.7
7905 + react-dom: 19.2.7(react@19.2.7)
7906
7907 framesync@6.1.2:
7908 dependencies:
@@ -8149,7 +7935,7 @@ snapshots:
7935 get-proto: 1.0.1
7936 gopd: 1.2.0
7937 has-symbols: 1.1.0
8152 - hasown: 2.0.3
7938 + hasown: 2.0.4
7939 math-intrinsics: 1.1.0
7940
7941 get-proto@1.0.1:
@@ -8219,7 +8005,7 @@ snapshots:
8005 dependencies:
8006 has-symbols: 1.1.0
8007
8222 - hasown@2.0.3:
8008 + hasown@2.0.4:
8009 dependencies:
8010 function-bind: 1.1.2
8011
@@ -8232,7 +8018,7 @@ snapshots:
8018 hast-util-whitespace: 3.0.0
8019 html-void-elements: 3.0.0
8020 mdast-util-to-hast: 13.2.1
8235 - property-information: 7.1.0
8021 + property-information: 7.2.0
8022 space-separated-tokens: 2.0.2
8023 stringify-entities: 4.0.4
8024 zwitch: 2.0.4
@@ -8249,7 +8035,7 @@ snapshots:
8035 mdast-util-mdx-expression: 2.0.1
8036 mdast-util-mdx-jsx: 3.2.0
8037 mdast-util-mdxjs-esm: 2.0.1
8252 - property-information: 7.1.0
8038 + property-information: 7.2.0
8039 space-separated-tokens: 2.0.2
8040 style-to-js: 1.1.21
8041 unist-util-position: 5.0.0
@@ -8304,7 +8090,7 @@ snapshots:
8090
8091 ignore@7.0.5: {}
8092
8307 - immutable@5.1.5: {}
8093 + immutable@5.1.6: {}
8094
8095 import-fresh@3.3.1:
8096 dependencies:
@@ -8343,7 +8129,7 @@ snapshots:
8129
8130 is-core-module@2.16.2:
8131 dependencies:
8346 - hasown: 2.0.3
8132 + hasown: 2.0.4
8133
8134 is-decimal@2.0.1: {}
8135
@@ -8366,6 +8152,8 @@ snapshots:
8152
8153 is-hexadecimal@2.0.1: {}
8154
8155 + is-in-ssh@1.0.0: {}
8156 +
8157 is-inside-container@1.0.0:
8158 dependencies:
8159 is-docker: 3.0.0
@@ -8383,7 +8171,7 @@ snapshots:
8171 call-bound: 1.0.4
8172 gopd: 1.2.0
8173 has-tostringtag: 1.0.2
8386 - hasown: 2.0.3
8174 + hasown: 2.0.4
8175
8176 is-stream@2.0.1: {}
8177
@@ -8428,10 +8216,10 @@ snapshots:
8216 config-chain: 1.1.13
8217 editorconfig: 1.0.7
8218 glob: 10.5.0
8431 - js-cookie: 3.0.7
8219 + js-cookie: 3.0.8
8220 nopt: 7.2.1
8221
8434 - js-cookie@3.0.7: {}
8222 + js-cookie@3.0.8: {}
8223
8224 js-md5@0.8.3: {}
8225
@@ -8478,12 +8266,12 @@ snapshots:
8266 decimal.js: 10.6.0
8267 html-encoding-sniffer: 6.0.0
8268 is-potential-custom-element-name: 1.0.1
8481 - lru-cache: 11.5.0
8269 + lru-cache: 11.5.1
8270 parse5: 8.0.1
8271 saxes: 6.0.0
8272 symbol-tree: 3.2.4
8273 tough-cookie: 6.0.1
8486 - undici: 7.26.0
8274 + undici: 7.27.0
8275 w3c-xmlserializer: 5.0.0
8276 webidl-conversions: 8.0.1
8277 whatwg-mimetype: 5.0.0
@@ -8627,15 +8415,15 @@ snapshots:
8415
8416 lru-cache@10.4.3: {}
8417
8630 - lru-cache@11.5.0: {}
8418 + lru-cache@11.5.1: {}
8419
8420 lru-cache@5.1.1:
8421 dependencies:
8422 yallist: 3.1.1
8423
8636 - lucide-react@1.16.0(react@19.2.6):
8424 + lucide-react@1.17.0(react@19.2.7):
8425 dependencies:
8638 - react: 19.2.6
8426 + react: 19.2.7
8427
8428 lz-string@1.5.0: {}
8429
@@ -9088,7 +8876,7 @@ snapshots:
8876
8877 minimatch@3.1.5:
8878 dependencies:
9091 - brace-expansion: 1.1.14
8879 + brace-expansion: 1.1.15
8880
8881 minimatch@7.4.9:
8882 dependencies:
@@ -9142,8 +8930,8 @@ snapshots:
8930 async-validator: 4.2.5
8931 css-render: 0.15.14
8932 csstype: 3.2.3
9145 - date-fns: 4.3.0
9146 - date-fns-tz: 3.2.0(date-fns@4.3.0)
8933 + date-fns: 4.4.0
8934 + date-fns-tz: 3.2.0(date-fns@4.4.0)
8935 evtd: 0.2.4
8936 highlight.js: 11.11.1
8937 lodash: 4.18.1
@@ -9234,12 +9022,14 @@ snapshots:
9022 regex: 6.1.0
9023 regex-recursion: 6.0.2
9024
9237 - open@10.2.0:
9025 + open@11.0.0:
9026 dependencies:
9027 default-browser: 5.5.0
9028 define-lazy-prop: 3.0.0
9029 + is-in-ssh: 1.0.0
9030 is-inside-container: 1.0.0
9242 - wsl-utils: 0.1.0
9031 + powershell-utils: 0.1.0
9032 + wsl-utils: 0.3.1
9033
9034 open@8.4.2:
9035 dependencies:
@@ -9392,6 +9182,8 @@ snapshots:
9182 picocolors: 1.1.1
9183 source-map-js: 1.2.1
9184
9185 + powershell-utils@0.1.0: {}
9186 +
9187 prelude-ls@1.2.1: {}
9188
9189 prettier-plugin-tailwindcss@0.8.0(prettier@3.8.3):
@@ -9410,7 +9202,7 @@ snapshots:
9202 object-assign: 4.1.1
9203 react-is: 16.13.1
9204
9413 - property-information@7.1.0: {}
9205 + property-information@7.2.0: {}
9206
9207 proto-list@1.2.4: {}
9208
@@ -9504,25 +9296,25 @@ snapshots:
9296 destr: 2.0.5
9297 optional: true
9298
9507 - react-dom@19.2.6(react@19.2.6):
9299 + react-dom@19.2.7(react@19.2.7):
9300 dependencies:
9509 - react: 19.2.6
9301 + react: 19.2.7
9302 scheduler: 0.27.0
9303
9304 react-is@16.13.1: {}
9305
9514 - react-is@19.2.6: {}
9306 + react-is@19.2.7: {}
9307
9516 - react-markdown@10.1.0(@types/react@19.2.15)(react@19.2.6):
9308 + react-markdown@10.1.0(@types/react@19.2.16)(react@19.2.7):
9309 dependencies:
9310 '@types/hast': 3.0.4
9311 '@types/mdast': 4.0.4
9520 - '@types/react': 19.2.15
9312 + '@types/react': 19.2.16
9313 devlop: 1.1.0
9314 hast-util-to-jsx-runtime: 2.3.6
9315 html-url-attributes: 3.0.1
9316 mdast-util-to-hast: 13.2.1
9525 - react: 19.2.6
9317 + react: 19.2.7
9318 remark-parse: 11.0.0
9319 remark-rehype: 11.1.2
9320 unified: 11.0.5
@@ -9531,35 +9323,35 @@ snapshots:
9323 transitivePeerDependencies:
9324 - supports-color
9325
9534 - react-router-dom@7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
9326 + react-router-dom@7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
9327 dependencies:
9536 - react: 19.2.6
9537 - react-dom: 19.2.6(react@19.2.6)
9538 - react-router: 7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
9328 + react: 19.2.7
9329 + react-dom: 19.2.7(react@19.2.7)
9330 + react-router: 7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
9331
9540 - react-router@7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
9332 + react-router@7.16.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
9333 dependencies:
9334 cookie: 1.1.1
9543 - react: 19.2.6
9335 + react: 19.2.7
9336 set-cookie-parser: 2.7.2
9337 optionalDependencies:
9546 - react-dom: 19.2.6(react@19.2.6)
9338 + react-dom: 19.2.7(react@19.2.7)
9339
9548 - react-transition-group@4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
9340 + react-transition-group@4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
9341 dependencies:
9342 '@babel/runtime': 7.29.7
9343 dom-helpers: 5.2.1
9344 loose-envify: 1.4.0
9345 prop-types: 15.8.1
9554 - react: 19.2.6
9555 - react-dom: 19.2.6(react@19.2.6)
9346 + react: 19.2.7
9347 + react-dom: 19.2.7(react@19.2.7)
9348
9557 - react18-json-view@0.2.10(react@19.2.6):
9349 + react18-json-view@0.2.10(react@19.2.7):
9350 dependencies:
9351 copy-to-clipboard: 3.3.3
9560 - react: 19.2.6
9352 + react: 19.2.7
9353
9562 - react@19.2.6: {}
9354 + react@19.2.7: {}
9355
9356 read-package-json-fast@6.0.0:
9357 dependencies:
@@ -9695,35 +9487,14 @@ snapshots:
9487 '@rolldown/binding-win32-arm64-msvc': 1.0.1
9488 '@rolldown/binding-win32-x64-msvc': 1.0.1
9489
9698 - rolldown@1.0.3:
9699 - dependencies:
9700 - '@oxc-project/types': 0.133.0
9701 - '@rolldown/pluginutils': 1.0.1
9702 - optionalDependencies:
9703 - '@rolldown/binding-android-arm64': 1.0.3
9704 - '@rolldown/binding-darwin-arm64': 1.0.3
9705 - '@rolldown/binding-darwin-x64': 1.0.3
9706 - '@rolldown/binding-freebsd-x64': 1.0.3
9707 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3
9708 - '@rolldown/binding-linux-arm64-gnu': 1.0.3
9709 - '@rolldown/binding-linux-arm64-musl': 1.0.3
9710 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3
9711 - '@rolldown/binding-linux-s390x-gnu': 1.0.3
9712 - '@rolldown/binding-linux-x64-gnu': 1.0.3
9713 - '@rolldown/binding-linux-x64-musl': 1.0.3
9714 - '@rolldown/binding-openharmony-arm64': 1.0.3
9715 - '@rolldown/binding-wasm32-wasi': 1.0.3
9716 - '@rolldown/binding-win32-arm64-msvc': 1.0.3
9717 - '@rolldown/binding-win32-x64-msvc': 1.0.3
9718 -
9719 - rollup-plugin-visualizer@5.14.0(rolldown@1.0.3):
9490 + rollup-plugin-visualizer@5.14.0(rolldown@1.0.1):
9491 dependencies:
9492 open: 8.4.2
9493 picomatch: 4.0.4
9494 source-map: 0.7.6
9495 yargs: 17.7.2
9496 optionalDependencies:
9726 - rolldown: 1.0.3
9497 + rolldown: 1.0.1
9498
9499 run-applescript@7.1.0: {}
9500
@@ -9738,7 +9509,7 @@ snapshots:
9509 sass@1.100.0:
9510 dependencies:
9511 chokidar: 5.0.0
9741 - immutable: 5.1.5
9512 + immutable: 5.1.6
9513 source-map-js: 1.2.1
9514 optionalDependencies:
9515 '@parcel/watcher': 2.5.6
@@ -9807,10 +9578,10 @@ snapshots:
9578
9579 sisteransi@1.0.5: {}
9580
9810 - sonner@1.7.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
9581 + sonner@1.7.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
9582 dependencies:
9812 - react: 19.2.6
9813 - react-dom: 19.2.6(react@19.2.6)
9583 + react: 19.2.7
9584 + react-dom: 19.2.7(react@19.2.7)
9585
9586 sortablejs@1.14.0: {}
9587
@@ -9920,9 +9691,9 @@ snapshots:
9691
9692 symbol-tree@3.2.4: {}
9693
9923 - synckit@0.11.12:
9694 + synckit@0.11.13:
9695 dependencies:
9925 - '@pkgr/core': 0.2.9
9696 + '@pkgr/core': 0.3.6
9697
9698 tagged-tag@1.0.0: {}
9699
@@ -9940,8 +9711,8 @@ snapshots:
9711 pathe: 2.0.3
9712 pnpm-workspace-yaml: 1.6.1
9713 restore-cursor: 5.1.0
9943 - tinyexec: 1.2.2
9944 - tinyglobby: 0.2.16
9714 + tinyexec: 1.2.4
9715 + tinyglobby: 0.2.17
9716 unconfig: 7.5.0
9717 yaml: 2.9.0
9718
@@ -9953,22 +9724,22 @@ snapshots:
9724
9725 tinybench@2.9.0: {}
9726
9956 - tinyexec@1.2.2: {}
9727 + tinyexec@1.2.4: {}
9728
9958 - tinyglobby@0.2.16:
9729 + tinyglobby@0.2.17:
9730 dependencies:
9731 fdir: 6.5.0(picomatch@4.0.4)
9732 picomatch: 4.0.4
9733
9734 tinyrainbow@3.1.0: {}
9735
9965 - tldts-core@7.4.0: {}
9736 + tldts-core@7.4.2: {}
9737
9967 - tldts@7.4.0:
9738 + tldts@7.4.2:
9739 dependencies:
9969 - tldts-core: 7.4.0
9740 + tldts-core: 7.4.2
9741
9971 - tmp@0.2.5: {}
9742 + tmp@0.2.7: {}
9743
9744 to-regex-range@5.0.1:
9745 dependencies:
@@ -9991,7 +9762,7 @@ snapshots:
9762
9763 tough-cookie@6.0.1:
9764 dependencies:
9994 - tldts: 7.4.0
9765 + tldts: 7.4.2
9766
9767 tr46@6.0.0:
9768 dependencies:
@@ -10019,7 +9790,7 @@ snapshots:
9790 dependencies:
9791 prelude-ls: 1.2.1
9792
10022 - type-fest@5.6.0:
9793 + type-fest@5.7.0:
9794 dependencies:
9795 tagged-tag: 1.0.0
9796
@@ -10052,9 +9823,9 @@ snapshots:
9823
9824 undici-types@7.24.6: {}
9825
10055 - undici-types@7.26.0: {}
9826 + undici-types@7.27.0: {}
9827
10057 - undici@7.26.0: {}
9828 + undici@7.27.0: {}
9829
9830 unified@11.0.5:
9831 dependencies:
@@ -10153,59 +9924,57 @@ snapshots:
9924 '@types/unist': 3.0.3
9925 vfile-message: 4.0.3
9926
10156 - vite-bundle-visualizer@1.2.1(rolldown@1.0.3):
9927 + vite-bundle-visualizer@1.2.1(rolldown@1.0.1):
9928 dependencies:
9929 cac: 6.7.14
9930 import-from-esm: 1.3.4
10160 - rollup-plugin-visualizer: 5.14.0(rolldown@1.0.3)
10161 - tmp: 0.2.5
9931 + rollup-plugin-visualizer: 5.14.0(rolldown@1.0.1)
9932 + tmp: 0.2.7
9933 transitivePeerDependencies:
9934 - rolldown
9935 - rollup
9936 - supports-color
9937
10167 - vite-dev-rpc@1.1.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9938 + vite-dev-rpc@2.0.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9939 dependencies:
10169 - birpc: 2.9.0
10170 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10171 - vite-hot-client: 2.2.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9940 + birpc: 4.0.0
9941 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9942 + vite-hot-client: 2.2.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9943
10173 - vite-hot-client@2.2.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9944 + vite-hot-client@2.2.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9945 dependencies:
10175 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9946 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9947
10177 - vite-plugin-inspect@11.3.3(@nuxt/kit@3.21.6)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9948 + vite-plugin-inspect@11.4.1(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9949 dependencies:
10179 - ansis: 4.3.0
10180 - debug: 4.4.3
9950 + ansis: 4.3.1
9951 error-stack-parser-es: 1.0.5
9952 + obug: 2.1.1
9953 ohash: 2.0.11
10183 - open: 10.2.0
9954 + open: 11.0.0
9955 perfect-debounce: 2.1.0
9956 sirv: 3.0.2
9957 unplugin-utils: 0.3.1
10187 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10188 - vite-dev-rpc: 1.1.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9958 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9959 + vite-dev-rpc: 2.0.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9960 optionalDependencies:
9961 '@nuxt/kit': 3.21.6
10191 - transitivePeerDependencies:
10192 - - supports-color
9962
10194 - vite-plugin-vue-devtools@8.1.2(@nuxt/kit@3.21.6)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)):
9963 + vite-plugin-vue-devtools@8.1.2(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)):
9964 dependencies:
9965 '@vue/devtools-core': 8.1.2(vue@3.5.35(typescript@6.0.3))
9966 '@vue/devtools-kit': 8.1.2
9967 '@vue/devtools-shared': 8.1.2
9968 sirv: 3.0.2
10200 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10201 - vite-plugin-inspect: 11.3.3(@nuxt/kit@3.21.6)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
10202 - vite-plugin-vue-inspector: 6.0.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9969 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9970 + vite-plugin-inspect: 11.4.1(@nuxt/kit@3.21.6)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9971 + vite-plugin-vue-inspector: 6.0.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
9972 transitivePeerDependencies:
9973 - '@nuxt/kit'
9974 - supports-color
9975 - vue
9976
10208 - vite-plugin-vue-inspector@6.0.0(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9977 + vite-plugin-vue-inspector@6.0.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
9978 dependencies:
9979 '@babel/core': 7.29.7
9980 '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7)
@@ -10213,10 +9982,10 @@ snapshots:
9982 '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7)
9983 '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
9984 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7)
10216 - '@vue/compiler-dom': 3.5.34
9985 + '@vue/compiler-dom': 3.5.35
9986 kolorist: 1.8.0
9987 magic-string: 0.30.21
10219 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9988 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
9989 transitivePeerDependencies:
9990 - supports-color
9991
@@ -10228,13 +9997,13 @@ snapshots:
9997 transitivePeerDependencies:
9998 - supports-color
9999
10231 - vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0):
10000 + vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0):
10001 dependencies:
10002 lightningcss: 1.32.0
10003 picomatch: 4.0.4
10004 postcss: 8.5.15
10005 rolldown: 1.0.1
10237 - tinyglobby: 0.2.16
10006 + tinyglobby: 0.2.17
10007 optionalDependencies:
10008 '@types/node': 25.9.1
10009 fsevents: 2.3.3
@@ -10242,15 +10011,15 @@ snapshots:
10011 sass: 1.100.0
10012 yaml: 2.9.0
10013
10245 - vitest@4.1.7(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
10014 + vitest@4.1.8(@types/node@25.9.1)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)):
10015 dependencies:
10247 - '@vitest/expect': 4.1.7
10248 - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
10249 - '@vitest/pretty-format': 4.1.7
10250 - '@vitest/runner': 4.1.7
10251 - '@vitest/snapshot': 4.1.7
10252 - '@vitest/spy': 4.1.7
10253 - '@vitest/utils': 4.1.7
10016 + '@vitest/expect': 4.1.8
10017 + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))
10018 + '@vitest/pretty-format': 4.1.8
10019 + '@vitest/runner': 4.1.8
10020 + '@vitest/snapshot': 4.1.8
10021 + '@vitest/spy': 4.1.8
10022 + '@vitest/utils': 4.1.8
10023 es-module-lexer: 2.1.0
10024 expect-type: 1.3.0
10025 magic-string: 0.30.21
@@ -10259,10 +10028,10 @@ snapshots:
10028 picomatch: 4.0.4
10029 std-env: 4.1.0
10030 tinybench: 2.9.0
10262 - tinyexec: 1.2.2
10263 - tinyglobby: 0.2.16
10031 + tinyexec: 1.2.4
10032 + tinyglobby: 0.2.17
10033 tinyrainbow: 3.1.0
10265 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10034 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10035 why-is-node-running: 2.3.0
10036 optionalDependencies:
10037 '@types/node': 25.9.1
@@ -10295,17 +10064,17 @@ snapshots:
10064 codemirror: 6.0.2
10065 vue: 3.5.35(typescript@6.0.3)
10066
10298 - vue-component-type-helpers@3.3.2: {}
10067 + vue-component-type-helpers@3.3.3: {}
10068
10069 vue-echarts@8.0.1(echarts@6.1.0)(vue@3.5.35(typescript@6.0.3)):
10070 dependencies:
10071 echarts: 6.1.0
10072 vue: 3.5.35(typescript@6.0.3)
10073
10305 - vue-eslint-parser@10.4.0(eslint@10.4.0(jiti@2.7.0)):
10074 + vue-eslint-parser@10.4.0(eslint@10.4.1(jiti@2.7.0)):
10075 dependencies:
10076 debug: 4.4.3
10308 - eslint: 10.4.0(jiti@2.7.0)
10077 + eslint: 10.4.1(jiti@2.7.0)
10078 eslint-scope: 9.1.2
10079 eslint-visitor-keys: 5.0.1
10080 espree: 11.2.0
@@ -10327,7 +10096,7 @@ snapshots:
10096 '@vue/devtools-api': 6.6.4
10097 vue: 3.5.35(typescript@6.0.3)
10098
10330 - vue-router@5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)):
10099 + vue-router@5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)):
10100 dependencies:
10101 '@babel/generator': 8.0.0-rc.6
10102 '@vue-macros/common': 3.1.2(vue@3.5.35(typescript@6.0.3))
@@ -10342,7 +10111,7 @@ snapshots:
10111 pathe: 2.0.3
10112 picomatch: 4.0.4
10113 scule: 1.3.0
10345 - tinyglobby: 0.2.16
10114 + tinyglobby: 0.2.17
10115 unplugin: 3.0.0
10116 unplugin-utils: 0.3.1
10117 vue: 3.5.35(typescript@6.0.3)
@@ -10350,23 +10119,18 @@ snapshots:
10119 optionalDependencies:
10120 '@vue/compiler-sfc': 3.5.35
10121 pinia: 3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
10353 - vite: 8.0.13(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10122 + vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)(yaml@2.9.0)
10123
10124 vue-sjv@0.0.6(vue@3.5.35(typescript@6.0.3)):
10125 dependencies:
10126 vue: 3.5.35(typescript@6.0.3)
10127
10359 - vue-tsc@3.3.2(typescript@6.0.3):
10128 + vue-tsc@3.3.3(typescript@6.0.3):
10129 dependencies:
10130 '@volar/typescript': 2.4.28
10362 - '@vue/language-core': 3.3.2
10131 + '@vue/language-core': 3.3.3
10132 typescript: 6.0.3
10133
10365 - vue3-apexcharts@1.11.1(apexcharts@5.13.0)(vue@3.5.35(typescript@6.0.3)):
10366 - dependencies:
10367 - apexcharts: 5.13.0
10368 - vue: 3.5.35(typescript@6.0.3)
10369 -
10134 vue3-marquee@4.2.2(vue@3.5.35(typescript@6.0.3)):
10135 dependencies:
10136 vue: 3.5.35(typescript@6.0.3)
@@ -10468,9 +10232,10 @@ snapshots:
10232
10233 wrappy@1.0.2: {}
10234
10471 - wsl-utils@0.1.0:
10235 + wsl-utils@0.3.1:
10236 dependencies:
10237 is-wsl: 3.1.1
10238 + powershell-utils: 0.1.0
10239
10240 xml-name-validator@4.0.0: {}
10241
frontend/pnpm-workspace.yaml
+1
@@ -15,6 +15,7 @@ allowBuilds:
15
16 overrides:
17 "@mui/icons-material": ^7.3.9
18 + rolldown: 1.0.1
19
20 peerDependencyRules:
21 allowedVersions:
frontend/src/components/aiAnalyst/Feedback/FeedbackDashboardMetricTiles.vue
+47 -18
@@ -1,32 +1,24 @@
1 <template>
2 <div class="@container w-full">
3 <div class="grid grid-cols-1 gap-3 @lg:grid-cols-2 @3xl:grid-cols-4">
4 - <MetricTile label="Total reviews" :value="stats.total_reviews.toString()" />
5 - <MetricTile
6 - label="Thumbs up"
7 - :value="pctLabel(stats.thumbs_up_pct)"
8 - :sub="`${stats.thumbs_up} up / ${stats.thumbs_down} down`"
9 - :color="pctColor(stats.thumbs_up_pct)"
10 - />
11 - <MetricTile
12 - label="IOC verdict accuracy"
13 - :value="pctLabel(stats.ioc_accuracy.accuracy_pct)"
14 - :sub="`${stats.ioc_accuracy.correct}/${stats.ioc_accuracy.total} IOCs correct`"
15 - :color="pctColor(stats.ioc_accuracy.accuracy_pct)"
16 - />
17 - <MetricTile
18 - label="Avg rating (overall)"
19 - :value="avgOverall == null ? '—' : `${avgOverall.toFixed(2)} / 5`"
20 - :sub="ratingSubtitle"
4 + <CardLink
5 + v-for="tile of metricTiles"
6 + :key="tile.title"
7 + size="small"
8 + :title="tile.title"
9 + :value="tile.value"
10 + :subtitle="tile.subtitle"
11 + :color="tile.color"
12 />
13 </div>
14 </div>
15 </template>
16
17 <script setup lang="ts">
18 +import type { CardLinkColor } from "@/components/common/cards/CardLink.vue"
19 import type { AiAnalystReviewStats } from "@/types/aiAnalyst.d"
20 import { computed, toRefs } from "vue"
29 -import MetricTile from "./FeedbackMetricTile.vue"
21 +import CardLink from "@/components/common/cards/CardLink.vue"
22
23 const props = defineProps<{
24 stats: AiAnalystReviewStats
@@ -54,6 +46,43 @@ const ratingSubtitle = computed(() => {
46 return `instr ${i ?? "—"} · artif ${a ?? "—"} · sev ${s ?? "—"}`
47 })
48
49 +interface MetricTileConfig {
50 + title: string
51 + value: string | number
52 + subtitle?: string
53 + color?: CardLinkColor
54 +}
55 +
56 +const metricTiles = computed<MetricTileConfig[]>(() => {
57 + const s = stats.value
58 + const avg = avgOverall.value
59 +
60 + return [
61 + {
62 + title: "Total reviews",
63 + value: s.total_reviews,
64 + subtitle: `correct ${s.template_choice_correct} · partial ${s.template_choice_partial} · wrong ${s.template_choice_wrong}`
65 + },
66 + {
67 + title: "Thumbs up",
68 + value: pctLabel(s.thumbs_up_pct),
69 + subtitle: `${s.thumbs_up} up / ${s.thumbs_down} down`,
70 + color: pctColor(s.thumbs_up_pct)
71 + },
72 + {
73 + title: "IOC verdict accuracy",
74 + value: pctLabel(s.ioc_accuracy.accuracy_pct),
75 + subtitle: `${s.ioc_accuracy.correct}/${s.ioc_accuracy.total} IOCs correct`,
76 + color: pctColor(s.ioc_accuracy.accuracy_pct)
77 + },
78 + {
79 + title: "Avg rating (overall)",
80 + value: avg == null ? "—" : `${avg.toFixed(2)} / 5`,
81 + subtitle: ratingSubtitle.value
82 + }
83 + ]
84 +})
85 +
86 function pctLabel(pct: number | null): string {
87 return pct === null || pct === undefined ? "—" : `${pct.toFixed(1)}%`
88 }
frontend/src/components/aiAnalyst/Feedback/FeedbackDashboardToolbar.vue
+18 -3
@@ -27,18 +27,33 @@
27 </n-button>
28 </div>
29
30 - <PalaceConsolidationDrawer v-if="customer" v-model:show="showConsolidation" :customer-code="customer" />
30 + <n-drawer
31 + v-model:show="showConsolidation"
32 + :width="640"
33 + placement="right"
34 + display-directive="show"
35 + class="max-w-[98vw]"
36 + >
37 + <n-drawer-content closable :native-scrollbar="false">
38 + <template #header>
39 + Palace consolidation
40 + <code class="ml-2">{{ customer }}</code>
41 + </template>
42 +
43 + <PalaceConsolidation v-if="customer" :customer-code="customer" />
44 + </n-drawer-content>
45 + </n-drawer>
46 </div>
47 </template>
48
49 <script setup lang="ts">
50 import type { ApiError } from "@/types/common"
36 -import { NButton, NSelect, useMessage } from "naive-ui"
51 +import { NButton, NDrawer, NDrawerContent, NSelect, useMessage } from "naive-ui"
52 import { onBeforeMount, ref } from "vue"
53 import Api from "@/api"
54 import Icon from "@/components/common/Icon.vue"
55 import { getApiErrorMessage } from "@/utils"
41 -import PalaceConsolidationDrawer from "./PalaceConsolidationDrawer.vue"
56 +import PalaceConsolidation from "./PalaceConsolidation.vue"
57
58 const emit = defineEmits<{
59 (e: "refresh"): void
frontend/src/components/aiAnalyst/Feedback/FeedbackMetricTile.vue deleted
-31
@@ -1,31 +0,0 @@
1 -<template>
2 - <CardEntity size="small" embedded>
3 - <template #default>
4 - <div class="flex flex-col gap-1">
5 - <div class="text-secondary text-xs tracking-wide uppercase">{{ label }}</div>
6 - <div
7 - class="text-2xl font-semibold"
8 - :class="{
9 - 'text-success': color === 'success',
10 - 'text-warning': color === 'warning',
11 - 'text-danger': color === 'danger'
12 - }"
13 - >
14 - {{ value }}
15 - </div>
16 - <div v-if="sub" class="text-secondary text-xs">{{ sub }}</div>
17 - </div>
18 - </template>
19 - </CardEntity>
20 -</template>
21 -
22 -<script setup lang="ts">
23 -import CardEntity from "@/components/common/cards/CardEntity.vue"
24 -
25 -defineProps<{
26 - label: string
27 - value: string
28 - sub?: string
29 - color?: "success" | "warning" | "danger"
30 -}>()
31 -</script>
frontend/src/components/aiAnalyst/Feedback/PalaceConsolidation.vue new
+306
@@ -0,0 +1,306 @@
1 +<template>
2 + <div class="flex min-h-40 flex-col gap-4">
3 + <n-spin :show="loading" class="grow">
4 + <div v-if="!data && !loading" class="flex flex-col items-center gap-3 pt-6">
5 + <n-empty description="No digest yet" />
6 + </div>
7 +
8 + <div v-else-if="data" class="@container flex flex-col gap-4">
9 + <!-- Summary tiles -->
10 + <div class="grid gap-3 @sm:grid-cols-2 @xl:grid-cols-4">
11 + <CardLink
12 + v-for="tile of summaryTiles"
13 + :key="tile.title"
14 + embedded
15 + size="small"
16 + :title="tile.title"
17 + :value="tile.value"
18 + :subtitle="tile.subtitle"
19 + :color="tile.color"
20 + />
21 + </div>
22 +
23 + <!-- Upcoming expirations -->
24 + <CardEntity v-if="data.upcoming_expirations.length" size="small" embedded highlighted>
25 + <template #headerMain>
26 + <Icon :name="WarningIcon" :size="14" class="text-warning relative top-0.5 mr-1" />
27 + Expiring soon ({{ data.upcoming_expirations.length }})
28 + </template>
29 + <template #default>
30 + <div class="flex flex-col gap-2">
31 + <CardEntity v-for="ls of data.upcoming_expirations" :key="ls.id" size="small">
32 + <template #header>
33 + <div class="text-default flex flex-wrap items-center gap-2">
34 + <Badge type="splitted" bright size="small">
35 + <template #label>ID</template>
36 + <template #value>{{ ls.id }}</template>
37 + </Badge>
38 + <Badge type="splitted" color="warning" size="small">
39 + <template #label>{{ ls.lesson_type }}</template>
40 + <template #value>{{ expiryLabel(ls.days_until_expiry) }}</template>
41 + </Badge>
42 + </div>
43 + </template>
44 + <template #default>
45 + <div class="text-sm">
46 + {{ ls.lesson_text }}
47 + </div>
48 + </template>
49 + </CardEntity>
50 + </div>
51 + </template>
52 + </CardEntity>
53 +
54 + <!-- Near-duplicate pairs -->
55 + <CardEntity v-if="data.duplicate_candidates.length" size="small" embedded>
56 + <template #headerMain>Near-duplicate candidates ({{ data.duplicate_candidates.length }})</template>
57 + <template #default>
58 + <div class="flex flex-col gap-2">
59 + <CardEntity
60 + v-for="pair of data.duplicate_candidates"
61 + :key="`${pair.lesson_a_id}-${pair.lesson_b_id}`"
62 + size="small"
63 + >
64 + <template #header>
65 + <div class="text-default flex flex-wrap items-center gap-2">
66 + <Badge type="splitted" bright :color="simColor(pair.similarity)" size="small">
67 + <template #label>{{ pair.room }}</template>
68 + <template #value>{{ Math.round(pair.similarity * 100) }}%</template>
69 + </Badge>
70 + </div>
71 + </template>
72 + <template #default>
73 + <dl class="mt-1 flex flex-col gap-2">
74 + <div class="flex flex-col gap-1">
75 + <dt class="text-secondary font-mono text-[10px] tracking-wider uppercase">
76 + Lesson {{ pair.lesson_a_id }}
77 + </dt>
78 + <dd
79 + class="text-default font-mono text-xs leading-snug wrap-break-word whitespace-pre-wrap"
80 + >
81 + {{ pair.lesson_a_text }}
82 + </dd>
83 + </div>
84 + <div class="border-border flex flex-col gap-1 border-t pt-3">
85 + <dt class="text-secondary font-mono text-[10px] tracking-wider uppercase">
86 + Lesson {{ pair.lesson_b_id }}
87 + </dt>
88 + <dd
89 + class="text-default font-mono text-xs leading-snug wrap-break-word whitespace-pre-wrap"
90 + >
91 + {{ pair.lesson_b_text }}
92 + </dd>
93 + </div>
94 + </dl>
95 + </template>
96 + </CardEntity>
97 + </div>
98 + </template>
99 + </CardEntity>
100 +
101 + <!-- Per-room breakdown -->
102 + <CardEntity size="small" embedded>
103 + <template #headerMain>By room</template>
104 + <template #default>
105 + <n-empty
106 + v-if="!data.rooms.length"
107 + description="No active lessons"
108 + class="min-h-20 justify-center"
109 + />
110 + <n-collapse v-else>
111 + <n-collapse-item v-for="group of data.rooms" :key="group.room" :name="group.room">
112 + <template #header>
113 + <div class="flex w-full flex-wrap items-center justify-between gap-2">
114 + <span class="font-medium">{{ group.room }}</span>
115 + <div class="ml-auto flex flex-wrap items-center gap-2">
116 + <Badge type="splitted" size="small">
117 + <template #label>Total</template>
118 + <template #value>{{ group.total }}</template>
119 + </Badge>
120 + <Badge type="splitted" color="success" size="small">
121 + <template #label>Durable</template>
122 + <template #value>{{ group.durable }}</template>
123 + </Badge>
124 + <Badge type="splitted" color="warning" size="small">
125 + <template #label>One-off</template>
126 + <template #value>{{ group.one_off }}</template>
127 + </Badge>
128 + </div>
129 + </div>
130 + </template>
131 + <div class="flex flex-col gap-2">
132 + <CardEntity v-for="ls of group.lessons" :key="ls.id" size="small">
133 + <template #default>
134 + <div class="flex flex-wrap items-center gap-2">
135 + <Badge
136 + type="splitted"
137 + size="small"
138 + :color="ls.durability === 'durable' ? 'success' : 'warning'"
139 + >
140 + <template #label>{{ ls.durability }}</template>
141 + <template #value>
142 + {{
143 + ls.durability === "one_off"
144 + ? expiryLabel(ls.days_until_expiry)
145 + : "∞"
146 + }}
147 + </template>
148 + </Badge>
149 + <Badge type="splitted" size="small" :color="statusColor(ls.status)">
150 + <template #label>Status</template>
151 + <template #value>{{ ls.status }}</template>
152 + </Badge>
153 + <Badge type="splitted" size="small">
154 + <template #label>ID</template>
155 + <template #value>{{ ls.id }}</template>
156 + </Badge>
157 + <Badge type="splitted" size="small">
158 + <template #label>Created at</template>
159 + <template #value>
160 + {{ formatDate(ls.created_at, "MMM D") }}
161 + </template>
162 + </Badge>
163 + </div>
164 + </template>
165 + <template #mainExtra>
166 + <div class="text-sm">
167 + {{ ls.lesson_text }}
168 + </div>
169 + </template>
170 + </CardEntity>
171 + </div>
172 + </n-collapse-item>
173 + </n-collapse>
174 + </template>
175 + </CardEntity>
176 +
177 + <n-collapse>
178 + <n-collapse-item title="Markdown" name="markdown">
179 + <CodeSource :code="data.markdown" lang="markdown" :max-height="500" />
180 + </n-collapse-item>
181 + </n-collapse>
182 +
183 + <p class="text-xs">Generated {{ formatDate(data.generated_at, "MMM D, YYYY HH:mm") }} UTC</p>
184 + </div>
185 + </n-spin>
186 +
187 + <div class="border-border flex w-full items-center justify-between gap-2 border-t pt-4">
188 + <p class="text-sm">
189 + <template v-if="data">{{ data.total_lessons }} lesson(s) · {{ data.rooms.length }} room(s)</template>
190 + </p>
191 + <div class="flex items-center gap-2">
192 + <n-button size="small" :loading @click="load()">
193 + <template #icon>
194 + <Icon :name="RefreshIcon" :size="14" />
195 + </template>
196 + Refresh
197 + </n-button>
198 + </div>
199 + </div>
200 + </div>
201 +</template>
202 +
203 +<script setup lang="ts">
204 +import type { CardLinkColor } from "@/components/common/cards/CardLink.vue"
205 +import type { PalaceConsolidation } from "@/types/aiAnalyst.d"
206 +import { NButton, NCollapse, NCollapseItem, NEmpty, NSpin, useMessage } from "naive-ui"
207 +import { computed, ref, watch } from "vue"
208 +import Api from "@/api"
209 +import Badge from "@/components/common/Badge.vue"
210 +import CardEntity from "@/components/common/cards/CardEntity.vue"
211 +import CardLink from "@/components/common/cards/CardLink.vue"
212 +import CodeSource from "@/components/common/CodeSource.vue"
213 +import Icon from "@/components/common/Icon.vue"
214 +import { getApiErrorMessage } from "@/utils"
215 +import { formatDate } from "@/utils/format"
216 +
217 +const props = defineProps<{
218 + customerCode: string
219 +}>()
220 +
221 +const RefreshIcon = "carbon:renew"
222 +const WarningIcon = "carbon:warning"
223 +
224 +const message = useMessage()
225 +
226 +const loading = ref(false)
227 +const data = ref<PalaceConsolidation | null>(null)
228 +
229 +interface SummaryTile {
230 + title: string
231 + value: number
232 + subtitle: string
233 + color?: CardLinkColor
234 +}
235 +
236 +const summaryTiles = computed<SummaryTile[]>(() => {
237 + const d = data.value
238 + if (!d) return []
239 +
240 + return [
241 + { title: "Active", value: d.total_lessons, subtitle: `${d.total_pending} pending` },
242 + { title: "Durable", value: d.total_durable, subtitle: "never expire", color: "success" },
243 + { title: "One-off", value: d.total_one_off, subtitle: "7-day TTL", color: "warning" },
244 + {
245 + title: "Duplicates",
246 + value: d.duplicate_candidates.length,
247 + subtitle: "near-dupe pairs",
248 + color: d.duplicate_candidates.length ? "warning" : undefined
249 + }
250 + ]
251 +})
252 +
253 +function simColor(sim: number): "success" | "warning" | "danger" {
254 + // Similarity is always >= threshold (0.7) when flagged — calibrate bands
255 + // for "probably rewrite" vs "review manually" at a glance.
256 + if (sim >= 0.9) return "danger"
257 + if (sim >= 0.8) return "warning"
258 + return "success"
259 +}
260 +
261 +function statusColor(status: string): "success" | "warning" | "danger" | undefined {
262 + if (status === "ingested") return "success"
263 + if (status === "pending") return "warning"
264 + if (status === "failed") return "danger"
265 + return undefined
266 +}
267 +
268 +function expiryLabel(days: number | null): string {
269 + if (days == null) return "—"
270 + if (days <= 0) return "due"
271 + if (days === 1) return "1d"
272 + return `${days}d`
273 +}
274 +
275 +async function load() {
276 + if (!props.customerCode) {
277 + data.value = null
278 + return
279 + }
280 + loading.value = true
281 + try {
282 + const res = await Api.aiAnalyst.getPalaceConsolidation(props.customerCode)
283 + if (res.data.success) {
284 + data.value = res.data
285 + } else {
286 + message.warning(res.data.message || "Failed to build consolidation")
287 + data.value = null
288 + }
289 + } catch (err: unknown) {
290 + message.error(getApiErrorMessage(err as never) || "Failed to build consolidation")
291 + data.value = null
292 + } finally {
293 + loading.value = false
294 + }
295 +}
296 +
297 +watch(
298 + () => props.customerCode,
299 + (code, prevCode) => {
300 + if (code && code !== prevCode) {
301 + load()
302 + }
303 + },
304 + { immediate: true }
305 +)
306 +</script>
frontend/src/components/aiAnalyst/Feedback/PalaceConsolidationDrawer.vue deleted
-322
@@ -1,322 +0,0 @@
1 -<template>
2 - <n-drawer v-model:show="showLocal" :width="640" placement="right">
3 - <n-drawer-content closable>
4 - <template #header>
5 - Palace consolidation
6 - <code v-if="customerCode" class="ml-2">{{ customerCode }}</code>
7 - </template>
8 -
9 - <n-spin :show="loading" class="min-h-40">
10 - <div v-if="!customerCode" class="pt-6 text-center">
11 - <n-empty description="Select a customer first" />
12 - </div>
13 -
14 - <div v-else-if="!data && !loading" class="flex flex-col items-center gap-3 pt-6">
15 - <n-empty description="No digest yet" />
16 - </div>
17 -
18 - <div v-else-if="data" class="flex flex-col gap-4">
19 - <!-- Summary tiles -->
20 - <div class="grid grid-cols-2 gap-3 md:grid-cols-4">
21 - <MetricTile
22 - label="Active"
23 - :value="data.total_lessons.toString()"
24 - :sub="`${data.total_pending} pending`"
25 - />
26 - <MetricTile
27 - label="Durable"
28 - :value="data.total_durable.toString()"
29 - sub="never expire"
30 - color="success"
31 - />
32 - <MetricTile
33 - label="One-off"
34 - :value="data.total_one_off.toString()"
35 - sub="7-day TTL"
36 - color="warning"
37 - />
38 - <MetricTile
39 - label="Duplicates"
40 - :value="data.duplicate_candidates.length.toString()"
41 - sub="near-dupe pairs"
42 - :color="data.duplicate_candidates.length ? 'warning' : undefined"
43 - />
44 - </div>
45 -
46 - <!-- Upcoming expirations -->
47 - <CardEntity v-if="data.upcoming_expirations.length" size="small" embedded highlighted>
48 - <template #headerMain>
49 - <Icon :name="WarningIcon" :size="14" class="text-warning mr-1" />
50 - Expiring soon ({{ data.upcoming_expirations.length }})
51 - </template>
52 - <template #default>
53 - <div class="flex flex-col gap-2">
54 - <div
55 - v-for="ls of data.upcoming_expirations"
56 - :key="ls.id"
57 - class="border-color bg-secondary rounded border p-2 text-sm"
58 - >
59 - <div class="mb-1 flex flex-wrap items-center gap-2">
60 - <Badge type="splitted" bright color="warning">
61 - <template #label>{{ ls.lesson_type }}</template>
62 - <template #value>{{ expiryLabel(ls.days_until_expiry) }}</template>
63 - </Badge>
64 - <span class="text-secondary text-xs">id {{ ls.id }}</span>
65 - </div>
66 - <div class="wrap-break-word whitespace-pre-wrap">{{ ls.lesson_text }}</div>
67 - </div>
68 - </div>
69 - </template>
70 - </CardEntity>
71 -
72 - <!-- Near-duplicate pairs -->
73 - <CardEntity v-if="data.duplicate_candidates.length" size="small" embedded>
74 - <template #headerMain>
75 - Near-duplicate candidates ({{ data.duplicate_candidates.length }})
76 - </template>
77 - <template #default>
78 - <div class="flex flex-col gap-2">
79 - <div
80 - v-for="pair of data.duplicate_candidates"
81 - :key="`${pair.lesson_a_id}-${pair.lesson_b_id}`"
82 - class="border-color bg-secondary rounded border p-2 text-sm"
83 - >
84 - <div class="mb-1 flex flex-wrap items-center gap-2">
85 - <Badge type="splitted" bright :color="simColor(pair.similarity)">
86 - <template #label>{{ pair.room }}</template>
87 - <template #value>{{ Math.round(pair.similarity * 100) }}%</template>
88 - </Badge>
89 - </div>
90 - <div class="mb-1">
91 - <span class="text-secondary text-xs">#{{ pair.lesson_a_id }}</span>
92 - <span class="ml-1 wrap-break-word whitespace-pre-wrap">
93 - {{ pair.lesson_a_text }}
94 - </span>
95 - </div>
96 - <div>
97 - <span class="text-secondary text-xs">#{{ pair.lesson_b_id }}</span>
98 - <span class="ml-1 wrap-break-word whitespace-pre-wrap">
99 - {{ pair.lesson_b_text }}
100 - </span>
101 - </div>
102 - </div>
103 - </div>
104 - </template>
105 - </CardEntity>
106 -
107 - <!-- Per-room breakdown -->
108 - <CardEntity size="small" embedded>
109 - <template #headerMain>By room</template>
110 - <template #default>
111 - <n-empty
112 - v-if="!data.rooms.length"
113 - description="No active lessons"
114 - class="min-h-20 justify-center"
115 - />
116 - <n-collapse v-else>
117 - <n-collapse-item v-for="group of data.rooms" :key="group.room" :name="group.room">
118 - <template #header>
119 - <div class="flex items-center gap-2">
120 - <span class="font-medium">{{ group.room }}</span>
121 - <Badge type="splitted">
122 - <template #label>Total</template>
123 - <template #value>{{ group.total }}</template>
124 - </Badge>
125 - <Badge type="splitted" color="success">
126 - <template #label>Durable</template>
127 - <template #value>{{ group.durable }}</template>
128 - </Badge>
129 - <Badge type="splitted" color="warning">
130 - <template #label>One-off</template>
131 - <template #value>{{ group.one_off }}</template>
132 - </Badge>
133 - </div>
134 - </template>
135 - <div class="flex flex-col gap-2">
136 - <CardEntity v-for="ls of group.lessons" :key="ls.id" size="small">
137 - <template #default>
138 - <div class="flex flex-wrap items-center gap-2">
139 - <Badge
140 - type="splitted"
141 - :color="ls.durability === 'durable' ? 'success' : 'warning'"
142 - >
143 - <template #label>{{ ls.durability }}</template>
144 - <template #value>
145 - {{
146 - ls.durability === "one_off"
147 - ? expiryLabel(ls.days_until_expiry)
148 - : "∞"
149 - }}
150 - </template>
151 - </Badge>
152 - <Badge type="splitted" :color="statusColor(ls.status)">
153 - <template #label>Status</template>
154 - <template #value>{{ ls.status }}</template>
155 - </Badge>
156 - <Badge type="splitted">
157 - <template #label>ID</template>
158 - <template #value>{{ ls.id }}</template>
159 - </Badge>
160 - <Badge type="splitted">
161 - <template #label>Created at</template>
162 - <template #value>
163 - {{ formatDate(ls.created_at, "MMM D") }}
164 - </template>
165 - </Badge>
166 - </div>
167 - </template>
168 - <template #mainExtra>
169 - {{ ls.lesson_text }}
170 - </template>
171 - </CardEntity>
172 - </div>
173 - </n-collapse-item>
174 - </n-collapse>
175 - </template>
176 - </CardEntity>
177 -
178 - <p class="text-xs">Generated {{ formatDate(data.generated_at, "MMM D, YYYY HH:mm") }} UTC</p>
179 - </div>
180 - </n-spin>
181 -
182 - <template #footer>
183 - <div class="flex w-full items-center justify-between gap-2">
184 - <p class="text-sm">
185 - <template v-if="data">
186 - {{ data.total_lessons }} lesson(s) · {{ data.rooms.length }} room(s)
187 - </template>
188 - </p>
189 - <div class="flex items-center gap-2">
190 - <n-button
191 - v-if="isCopySupported"
192 - size="small"
193 - :disabled="!data || !data.markdown"
194 - @click="copyMarkdown"
195 - >
196 - <template #icon>
197 - <Icon :name="CopyIcon" :size="14" />
198 - </template>
199 - <div class="min-w-28 text-left">
200 - {{ showCopyTooltip ? "Copied!" : "Copy markdown" }}
201 - </div>
202 - </n-button>
203 - <n-button size="small" :disabled="!customerCode" :loading @click="load()">
204 - <template #icon>
205 - <Icon :name="RefreshIcon" :size="14" />
206 - </template>
207 - Refresh
208 - </n-button>
209 - </div>
210 - </div>
211 - </template>
212 - </n-drawer-content>
213 - </n-drawer>
214 -</template>
215 -
216 -<script setup lang="ts">
217 -import type { PalaceConsolidation } from "@/types/aiAnalyst.d"
218 -import { useClipboard } from "@vueuse/core"
219 -import { NButton, NCollapse, NCollapseItem, NDrawer, NDrawerContent, NEmpty, NSpin, useMessage } from "naive-ui"
220 -import { computed, ref, watch } from "vue"
221 -import Api from "@/api"
222 -import Badge from "@/components/common/Badge.vue"
223 -import CardEntity from "@/components/common/cards/CardEntity.vue"
224 -import Icon from "@/components/common/Icon.vue"
225 -import { getApiErrorMessage } from "@/utils"
226 -import { formatDate } from "@/utils/format"
227 -import MetricTile from "./FeedbackMetricTile.vue"
228 -
229 -const props = defineProps<{
230 - show: boolean
231 - customerCode: string | null
232 -}>()
233 -
234 -const emit = defineEmits<{
235 - (e: "update:show", value: boolean): void
236 -}>()
237 -
238 -const RefreshIcon = "carbon:renew"
239 -const CopyIcon = "carbon:copy"
240 -const WarningIcon = "carbon:warning"
241 -
242 -const message = useMessage()
243 -const { copy: copyMarkdownText, copied: showCopyTooltip, isSupported: isCopySupported } = useClipboard()
244 -
245 -// v-model:show bridge — local ref mirrors the prop so the drawer's
246 -// internal close button also propagates back to the parent.
247 -const showLocal = computed({
248 - get: () => props.show,
249 - set: (v: boolean) => emit("update:show", v)
250 -})
251 -
252 -const loading = ref(false)
253 -const data = ref<PalaceConsolidation | null>(null)
254 -
255 -function simColor(sim: number): "success" | "warning" | "danger" {
256 - // Similarity is always >= threshold (0.7) when flagged — calibrate bands
257 - // for "probably rewrite" vs "review manually" at a glance.
258 - if (sim >= 0.9) return "danger"
259 - if (sim >= 0.8) return "warning"
260 - return "success"
261 -}
262 -
263 -function statusColor(status: string): "success" | "warning" | "danger" | undefined {
264 - if (status === "ingested") return "success"
265 - if (status === "pending") return "warning"
266 - if (status === "failed") return "danger"
267 - return undefined
268 -}
269 -
270 -function expiryLabel(days: number | null): string {
271 - if (days == null) return "—"
272 - if (days <= 0) return "due"
273 - if (days === 1) return "1d"
274 - return `${days}d`
275 -}
276 -
277 -async function load() {
278 - if (!props.customerCode) {
279 - data.value = null
280 - return
281 - }
282 - loading.value = true
283 - try {
284 - const res = await Api.aiAnalyst.getPalaceConsolidation(props.customerCode)
285 - if (res.data.success) {
286 - data.value = res.data
287 - } else {
288 - message.warning(res.data.message || "Failed to build consolidation")
289 - data.value = null
290 - }
291 - } catch (err: unknown) {
292 - message.error(getApiErrorMessage(err as never) || "Failed to build consolidation")
293 - data.value = null
294 - } finally {
295 - loading.value = false
296 - }
297 -}
298 -
299 -async function copyMarkdown() {
300 - if (!data.value?.markdown) return
301 -
302 - copyMarkdownText(data.value.markdown)
303 -}
304 -
305 -// Auto-load on open (and reload if customer changes while open).
306 -// NB: don't destructure oldValue in the handler — on `immediate: true` the
307 -// initial oldValue is `undefined`, which throws on tuple destructure and
308 -// crashes setup, which Vue's error-recovery retries → infinite remount loop.
309 -watch(
310 - () => [props.show, props.customerCode] as const,
311 - (curr, prev) => {
312 - const [show, code] = curr
313 - const prevShow = prev ? prev[0] : false
314 - if (show && code && (!prevShow || data.value?.customer_code !== code)) {
315 - load()
316 - }
317 - // When show flips back to false we keep the previous data around so
318 - // re-opening feels instant; reset only when the customer changes.
319 - },
320 - { immediate: true }
321 -)
322 -</script>
frontend/src/components/common/CodeSource.vue
+17 -2
@@ -1,7 +1,12 @@
1 <template>
2 <div class="flex flex-col gap-0.5">
3 <n-card v-if="!showSource" content-class="p-0!" embedded class="overflow-hidden">
4 - <div v-shiki="{ lang, decode }" class="scrollbar-styled code-bg-transparent overflow-hidden">
4 + <div
5 + v-shiki="{ lang, decode }"
6 + class="scrollbar-styled code-bg-transparent overflow-auto"
7 + :class="codeClass"
8 + :style="codeBlockStyle"
9 + >
10 <pre v-html="source"></pre>
11 </div>
12 </n-card>
@@ -38,6 +43,7 @@
43 </template>
44
45 <script setup lang="ts">
46 +import type { HTMLAttributes } from "vue"
47 import { useClipboard } from "@vueuse/core"
48 import { NButton, NCard, NInput } from "naive-ui"
49 import { computed, ref } from "vue"
@@ -48,12 +54,16 @@ const {
54 code,
55 lang,
56 decode,
51 - showToggleButton = true
57 + showToggleButton = true,
58 + maxHeight,
59 + codeClass
60 } = defineProps<{
61 code: string | object | number
62 lang?: string
63 decode?: boolean
64 showToggleButton?: boolean
65 + maxHeight?: string | number
66 + codeClass?: HTMLAttributes["class"]
67 }>()
68
69 const { copy, copied, isSupported } = useClipboard()
@@ -62,4 +72,9 @@ const showSource = ref(false)
72 const source = computed(() =>
73 typeof code === "string" || typeof code === "number" ? `${code}` : JSON.stringify(code, null, "\t")
74 )
75 +
76 +const codeBlockStyle = computed(() => {
77 + if (maxHeight == null) return undefined
78 + return { maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight }
79 +})
80 </script>
frontend/src/components/common/cards/CardEntity.vue
+12 -6
@@ -48,10 +48,7 @@
48 </div>
49
50 <div
51 - v-if="
52 - (!$slots.footer || hideFooter) &&
53 - ($slots.footerMain || ($slots.footerExtra && !hideFooterExtra))
54 - "
51 + v-if="showFooterMainLayout"
52 class="footer-box flex flex-wrap items-start justify-between"
53 :class="footerBoxClass"
54 >
@@ -69,6 +66,7 @@
66
67 <script setup lang="ts">
68 import { NCard, NSpin } from "naive-ui"
69 +import { computed, useSlots } from "vue"
70
71 const {
72 size,
@@ -109,6 +107,12 @@ const {
107 cardEntityWrapperClass?: string
108 footerBoxClass?: string
109 }>()
110 +
111 +const slots = useSlots()
112 +
113 +const showFooterMainLayout = computed(
114 + () => (!slots.footer || hideFooter) && (!!slots.footerMain || (!!slots.footerExtra && !hideFooterExtra))
115 +)
116 </script>
117
118 <style lang="scss" scoped>
@@ -231,8 +235,10 @@ const {
235 border-color: rgba(var(--primary-color-rgb) / 0.3);
236
237 &:not(.disabled) {
234 - &:hover {
235 - box-shadow: 0px 0px 0px 1px var(--primary-color);
238 + &.hoverable {
239 + &:hover {
240 + box-shadow: 0px 0px 0px 1px var(--primary-color);
241 + }
242 }
243 }
244 }
frontend/src/components/common/cards/CardLink.vue
+9 -1
@@ -39,7 +39,15 @@
39 <slot name="header-extra" />
40 </div>
41 <slot />
42 - <div class="font-mono text-xl font-semibold">
42 + <div
43 + class="font-mono text-xl font-semibold"
44 + :class="{
45 + 'text-warning': color === 'warning',
46 + 'text-success': color === 'success',
47 + 'text-error': color === 'danger',
48 + 'text-primary': color === 'primary'
49 + }"
50 + >
51 <slot name="value">{{ value }}</slot>
52 </div>
53 <div v-if="subtitle || $slots.subtitle" class="text-secondary text-xs">
frontend/src/components/common/charts/ChartBar.vue
+2 -2
@@ -62,7 +62,7 @@ function updatePlotSize() {
62 const yAxisLabelWidth = computed(() => (chartWidth.value === 0 || chartWidth.value >= 1080 ? 200 : 100))
63
64 const sortedRows = computed(() =>
65 - props.labels
65 + (props.labels || [])
66 .map((label, i) => ({
67 label,
68 value: Number(props.data[i] ?? 0)
@@ -76,7 +76,7 @@ const chartOption = computed((): ChartOption => {
76 const bc = style["border-color"]
77 const ff = style["font-family"]
78 const palette = props.monochrome ? [CHART_COLORS[0]] : CHART_COLORS
79 - const hasData = props.labels.length > 0
79 + const hasData = props.labels?.length > 0
80
81 if (!hasData) {
82 return {
frontend/src/components/common/charts/ChartColumn.vue
+4 -4
@@ -67,7 +67,7 @@ function updatePlotWidth() {
67 }
68
69 const categoryLabels = computed(() =>
70 - props.labels.map(label =>
70 + (props.labels || []).map(label =>
71 props.labelsDatetime ? `${dayjs(label).format(dFormats.date)}\n${dayjs(label).format(dFormats.time)}` : label
72 )
73 )
@@ -80,7 +80,7 @@ const chartOption = computed((): ChartOption => {
80 const bc = style["border-color"]
81 const ff = style["font-family"]
82 const palette = props.monochrome ? [CHART_COLORS[0]] : CHART_COLORS
83 - const hasData = props.labels.length > 0
83 + const hasData = props.labels?.length > 0
84
85 if (!hasData) {
86 return {
@@ -94,7 +94,7 @@ const chartOption = computed((): ChartOption => {
94 }
95 }
96
97 - const barData = props.labels.map((_, i) => ({
97 + const barData = (props.labels || []).map((_, i) => ({
98 value: Number(props.data[i] ?? 0),
99 itemStyle: {
100 color: palette[i % palette.length],
@@ -157,7 +157,7 @@ const chartOption = computed((): ChartOption => {
157 function onChartClick(params: unknown) {
158 const p = params as { componentType?: string; dataIndex?: number }
159 if (p.componentType !== "series" || p.dataIndex == null) return
160 - const name = props.labels[p.dataIndex]
160 + const name = (props.labels || [])[p.dataIndex]
161 if (name) emit("itemClick", { name })
162 }
163 </script>
frontend/src/components/common/charts/ChartPie.vue
+3 -3
@@ -42,7 +42,7 @@ type ChartOption = ComposeOption<
42 const themeStore = useThemeStore()
43
44 const pieData = computed(() =>
45 - props.labels.map((label, i) => ({
45 + (props.labels || []).map((label, i) => ({
46 name: label,
47 value: Number(props.data[i] ?? 0)
48 }))
@@ -55,7 +55,7 @@ const chartOption = computed((): ChartOption => {
55 const fg = style["fg-default-color"]
56 const ff = style["font-family"]
57 const palette = props.monochrome ? [CHART_COLORS[0]] : [...CHART_COLORS]
58 - const hasData = props.labels.length > 0
58 + const hasData = props.labels?.length > 0
59
60 if (!hasData) {
61 return {
@@ -147,7 +147,7 @@ const chartOption = computed((): ChartOption => {
147
148 function resolveClickedItemName(params: ECElementEvent): string | undefined {
149 if (params.componentType === "legend" || params.componentType === "series") {
150 - return params.name ?? props.labels[params.dataIndex ?? -1]
150 + return params.name ?? (props.labels || [])[params.dataIndex ?? -1]
151 }
152 return undefined
153 }
frontend/src/components/dashboards/DashboardCategoriesSection.vue
+44 -67
@@ -1,9 +1,9 @@
1 <template>
2 - <n-card size="small" class="@container">
3 - <template #header>Dashboard Categories</template>
4 - <template #header-extra>
2 + <div class="flex flex-col gap-2">
3 + <div class="flex items-center justify-between">
4 + <p class="text-secondary text-sm">Dashboard Categories</p>
5 <span class="text-secondary text-sm">{{ categories.length }} available</span>
6 - </template>
6 + </div>
7
8 <n-spin :show="loadingCategories">
9 <div
@@ -21,69 +21,39 @@
21 <n-empty v-else-if="!loadingCategories" description="No dashboard categories found" />
22 </n-spin>
23
24 - <div v-if="selectedCategory" class="border-border mt-4 flex flex-col gap-4 border-t pt-4">
25 - <div class="flex items-center justify-between gap-2">
26 - <div class="flex grow items-center justify-between">
27 - <div class="flex items-center gap-2">
28 - <div class="flex h-full items-center justify-center" :style="{ color: selectedCategory.color }">
29 - <Icon :name="getDashboardIcon(selectedCategory.icon)" :size="19" />
30 - </div>
31 - <span>{{ selectedCategory.title }}</span>
32 - </div>
33 - <span class="text-sm font-normal opacity-60">
34 - {{ selectedCategory.templates.length }} template{{
35 - selectedCategory.templates.length !== 1 ? "s" : ""
36 - }}
37 - </span>
38 - </div>
39 -
40 - <n-select
41 - v-model:value="selectedEventSourceId"
42 - :options="eventSourceOptions"
43 - placeholder="Select Event Source"
44 - filterable
45 - :loading="loadingEventSources"
46 - :disabled="!selectedCustomerCode"
47 - clearable
48 - size="small"
49 - :consistent-menu-width="false"
50 - class="w-48!"
24 + <n-drawer
25 + v-model:show="showCategoryDrawer"
26 + display-directive="show"
27 + :width="760"
28 + class="max-w-[92vw]"
29 + :trap-focus="false"
30 + >
31 + <n-drawer-content :title="drawerTitle" closable :native-scrollbar="false">
32 + <DashboardCategoryDrawerContent
33 + v-model:selected-event-source-id="selectedEventSourceId"
34 + :category="selectedCategory"
35 + :category-meta="selectedCategoryMeta ?? null"
36 + :loading-templates
37 + :selected-customer-code
38 + :loading-event-sources
39 + :event-sources-list
40 + :selected-category-id
41 + :enabled-dashboards
42 + @refresh-enabled-dashboards="emit('refreshEnabledDashboards')"
43 />
52 - </div>
53 -
54 - <n-spin :show="loadingTemplates">
55 - <div
56 - v-if="selectedCategory.templates.length"
57 - class="grid grid-cols-1 gap-3 @xl:grid-cols-2 @3xl:grid-cols-3 @6xl:grid-cols-4"
58 - >
59 - <DashboardTemplateCard
60 - v-for="tpl in selectedCategory.templates"
61 - :key="tpl.id"
62 - :template="tpl"
63 - :selected-customer-code
64 - :selected-event-source-id
65 - :selected-category-id
66 - :enabled-dashboards
67 - disabled-tooltip-text="Select an event source first"
68 - @refresh-enabled-dashboards="emit('refreshEnabledDashboards')"
69 - />
70 - </div>
71 - <n-empty v-else-if="!loadingTemplates" description="No templates in this category" />
72 - </n-spin>
73 - </div>
74 - </n-card>
44 + </n-drawer-content>
45 + </n-drawer>
46 + </div>
47 </template>
48
49 <script setup lang="ts">
50 import type { DashboardCategory, DashboardCategoryWithTemplates, EnabledDashboard } from "@/types/dashboards.d"
51 import type { EventSource } from "@/types/eventSources.d"
80 -import { NCard, NEmpty, NSelect, NSpin, useMessage } from "naive-ui"
52 +import { NDrawer, NDrawerContent, NEmpty, NSpin, useMessage } from "naive-ui"
53 import { computed, onBeforeMount, ref, watch } from "vue"
54 import Api from "@/api"
83 -import Icon from "@/components/common/Icon.vue"
55 import DashboardCategoryCard from "./DashboardCategoryCard.vue"
85 -import DashboardTemplateCard from "./DashboardTemplateCard.vue"
86 -import { getDashboardIcon } from "./utils"
56 +import DashboardCategoryDrawerContent from "./DashboardCategoryDrawerContent.vue"
57
58 const props = defineProps<{
59 selectedCustomerCode: string | null
@@ -105,15 +75,22 @@ const selectedCategory = ref<DashboardCategoryWithTemplates | null>(null)
75 const loadingTemplates = ref(false)
76 const selectedEventSourceId = ref<number | null>(null)
77
108 -const eventSourceOptions = computed(() =>
109 - props.eventSourcesList
110 - .filter(source => source.enabled)
111 - .map(source => ({
112 - label: `${source.name} (${source.event_type})`,
113 - value: source.id
114 - }))
78 +const selectedCategoryMeta = computed(() =>
79 + selectedCategoryId.value ? categories.value.find(cat => cat.id === selectedCategoryId.value) : null
80 )
81
82 +const drawerTitle = computed(() => selectedCategory.value?.title ?? selectedCategoryMeta.value?.title ?? "Category")
83 +
84 +const showCategoryDrawer = computed({
85 + get: () => selectedCategoryId.value !== null,
86 + set(open: boolean) {
87 + if (!open) {
88 + selectedCategoryId.value = null
89 + selectedCategory.value = null
90 + }
91 + }
92 +})
93 +
94 function getCategories() {
95 loadingCategories.value = true
96 Api.siem
@@ -135,12 +112,12 @@ function getCategories() {
112
113 function selectCategory(categoryId: string) {
114 if (selectedCategoryId.value === categoryId) {
138 - selectedCategoryId.value = null
139 - selectedCategory.value = null
115 + showCategoryDrawer.value = false
116 return
117 }
118
119 selectedCategoryId.value = categoryId
120 + selectedCategory.value = null
121 loadingTemplates.value = true
122
123 Api.siem
frontend/src/components/dashboards/DashboardCategoryDrawerContent.vue new
+86
@@ -0,0 +1,86 @@
1 +<template>
2 + <div class="flex flex-col gap-4">
3 + <div class="flex flex-wrap items-center justify-between gap-3">
4 + <div class="flex min-w-0 items-center gap-2">
5 + <div
6 + v-if="categoryMeta"
7 + class="flex shrink-0 items-center justify-center"
8 + :style="{ color: categoryMeta.color }"
9 + >
10 + <Icon :name="getDashboardIcon(categoryMeta.icon)" :size="19" />
11 + </div>
12 + <div v-if="category">
13 + {{ category.templates.length }} template{{ category.templates.length !== 1 ? "s" : "" }}
14 + </div>
15 + </div>
16 +
17 + <div class="flex items-center justify-end gap-3">
18 + <p v-if="!selectedEventSourceId" class="text-xs">select event source to add a template</p>
19 + <n-select
20 + v-model:value="selectedEventSourceId"
21 + :options="eventSourceOptions"
22 + placeholder="Select Event Source"
23 + filterable
24 + :loading="loadingEventSources"
25 + :disabled="!selectedCustomerCode"
26 + clearable
27 + size="small"
28 + :consistent-menu-width="false"
29 + class="w-48! shrink-0"
30 + />
31 + </div>
32 + </div>
33 +
34 + <n-spin :show="loadingTemplates">
35 + <div v-if="category?.templates.length" class="grid grid-cols-1 gap-3 @xl:grid-cols-2 @3xl:grid-cols-3">
36 + <DashboardTemplateCard
37 + v-for="tpl in category.templates"
38 + :key="tpl.id"
39 + :template="tpl"
40 + :selected-customer-code
41 + :selected-event-source-id
42 + :selected-category-id
43 + :enabled-dashboards
44 + @refresh-enabled-dashboards="emit('refreshEnabledDashboards')"
45 + />
46 + </div>
47 + <n-empty v-else-if="!loadingTemplates" description="No templates in this category" />
48 + </n-spin>
49 + </div>
50 +</template>
51 +
52 +<script setup lang="ts">
53 +import type { DashboardCategory, DashboardCategoryWithTemplates, EnabledDashboard } from "@/types/dashboards.d"
54 +import type { EventSource } from "@/types/eventSources.d"
55 +import { NEmpty, NSelect, NSpin } from "naive-ui"
56 +import { computed } from "vue"
57 +import Icon from "@/components/common/Icon.vue"
58 +import DashboardTemplateCard from "./DashboardTemplateCard.vue"
59 +import { getDashboardIcon } from "./utils"
60 +
61 +const props = defineProps<{
62 + category: DashboardCategoryWithTemplates | null
63 + categoryMeta: DashboardCategory | null
64 + loadingTemplates: boolean
65 + selectedCustomerCode: string | null
66 + loadingEventSources: boolean
67 + eventSourcesList: EventSource[]
68 + selectedCategoryId: string | null
69 + enabledDashboards: EnabledDashboard[]
70 +}>()
71 +
72 +const emit = defineEmits<{
73 + refreshEnabledDashboards: []
74 +}>()
75 +
76 +const selectedEventSourceId = defineModel<number | null>("selectedEventSourceId", { default: null })
77 +
78 +const eventSourceOptions = computed(() =>
79 + props.eventSourcesList
80 + .filter(source => source.enabled)
81 + .map(source => ({
82 + label: `${source.name} (${source.event_type})`,
83 + value: source.id
84 + }))
85 +)
86 +</script>
frontend/src/components/dashboards/DashboardTemplateCard.vue
+29 -18
@@ -17,33 +17,33 @@
17 </template>
18
19 <template #footerExtra>
20 - <n-tooltip v-if="!isEnabled" :disabled="!disabledTooltipText" class="px-2! py-1!">
21 - <template #trigger>
22 - <n-button size="small" type="primary" :disabled="!canEnable" @click="onEnable">
23 - <template #icon>
24 - <Icon :name="disabledTooltipText ? LockedIcon : EnableIcon" />
25 - </template>
26 - Enable
27 - </n-button>
28 - </template>
29 - <div class="text-sm">
30 - {{ disabledTooltipText }}
31 - </div>
32 - </n-tooltip>
33 - <n-button v-else size="small" type="error" quaternary @click="onDisable">
20 + <n-button v-if="isEnabled" size="small" type="error" quaternary :loading="toggling" @click="onDisable">
21 <template #icon>
22 <Icon :name="DisableIcon" />
23 </template>
24 Disable
25 </n-button>
26 + <n-button
27 + v-else
28 + size="small"
29 + type="primary"
30 + :disabled="!canEnable || toggling"
31 + :loading="toggling"
32 + @click="onEnable"
33 + >
34 + <template #icon>
35 + <Icon :name="selectedEventSourceId ? EnableIcon : LockedIcon" />
36 + </template>
37 + Enable
38 + </n-button>
39 </template>
40 </CardEntity>
41 </template>
42
43 <script setup lang="ts">
44 import type { DashboardTemplate, EnabledDashboard } from "@/types/dashboards.d"
45 -import { NButton, NTooltip, useDialog, useMessage } from "naive-ui"
46 -import { computed } from "vue"
45 +import { NButton, useDialog, useMessage } from "naive-ui"
46 +import { computed, ref } from "vue"
47 import Api from "@/api"
48 import Badge from "@/components/common/Badge.vue"
49 import CardEntity from "@/components/common/cards/CardEntity.vue"
@@ -55,7 +55,6 @@ const props = defineProps<{
55 selectedEventSourceId: number | null
56 selectedCategoryId: string | null
57 enabledDashboards: EnabledDashboard[]
58 - disabledTooltipText?: string
58 }>()
59
60 const emit = defineEmits<{
@@ -69,6 +68,8 @@ const EnableIcon = "carbon:add-alt"
68 const DisableIcon = "carbon:subtract-alt"
69 const LockedIcon = "carbon:locked"
70
71 +const toggling = ref(false)
72 +
73 const canEnable = computed(() => !!props.selectedCustomerCode && !!props.selectedEventSourceId)
74
75 const isEnabled = computed(() => {
@@ -88,6 +89,8 @@ function onEnable() {
89 return
90 }
91
92 + toggling.value = true
93 +
94 Api.siem
95 .enableDashboard({
96 customer_code: props.selectedCustomerCode,
@@ -107,6 +110,9 @@ function onEnable() {
110 .catch(err => {
111 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
112 })
113 + .finally(() => {
114 + toggling.value = false
115 + })
116 }
117
118 function onDisable() {
@@ -125,7 +131,9 @@ function onDisable() {
131 positiveText: "Disable",
132 negativeText: "Cancel",
133 onPositiveClick: () => {
128 - Api.siem
134 + toggling.value = true
135 +
136 + return Api.siem
137 .disableDashboard(match.id)
138 .then(res => {
139 if (res.data.success) {
@@ -138,6 +146,9 @@ function onDisable() {
146 .catch(err => {
147 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
148 })
149 + .finally(() => {
150 + toggling.value = false
151 + })
152 }
153 })
154 }
frontend/src/components/dashboards/DashboardsBrowser.vue
+64 -33
@@ -1,40 +1,68 @@
1 <template>
2 <div class="flex flex-col gap-4">
3 <!-- Filters Bar -->
4 - <n-form-item label="Customer" :show-feedback="false">
5 - <n-select
6 - v-model:value="selectedCustomerCode"
7 - :options="customersOptions"
8 - placeholder="Select Customer"
9 - filterable
10 - :loading="loadingCustomers"
11 - :consistent-menu-width="false"
12 - clearable
13 - />
14 - </n-form-item>
15 -
16 - <!-- No Event Sources Warning -->
17 - <n-alert v-if="showNoSourcesWarning" title="No Event Sources Configured" type="warning">
18 - An Event Source needs to be defined for this customer before dashboards can be enabled. Go to the customer's
19 - <strong>Event Sources</strong>
20 - tab to configure one.
21 - </n-alert>
22 -
23 - <EnabledDashboardsSection
24 - ref="enabledDashboardsSectionRef"
25 - v-model:enabled-dashboards="enabledDashboards"
26 - :customer-code="selectedCustomerCode"
27 - :visible="!!selectedCustomerCode && !showNoSourcesWarning"
28 - :event-sources-list
4 + <div class="flex flex-wrap items-end gap-3">
5 + <n-form-item label="Customer" :show-feedback="false" class="mb-0! min-w-60 grow">
6 + <n-select
7 + v-model:value="selectedCustomerCode"
8 + :options="customersOptions"
9 + placeholder="Select Customer"
10 + filterable
11 + :loading="loadingCustomers"
12 + :consistent-menu-width="false"
13 + clearable
14 + />
15 + </n-form-item>
16 +
17 + <n-button type="primary" :disabled="!selectedCustomerCode" @click="showAddTemplateDrawer = true">
18 + <template #icon>
19 + <Icon name="carbon:add" />
20 + </template>
21 + Add template
22 + </n-button>
23 + </div>
24 +
25 + <n-empty
26 + v-if="!selectedCustomerCode"
27 + description="Select a customer to browse dashboard templates and enable dashboards"
28 + class="h-48 justify-center"
29 />
30
31 - <DashboardCategoriesSection
32 - :selected-customer-code
33 - :event-sources-list
34 - :loading-event-sources
35 - :enabled-dashboards
36 - @refresh-enabled-dashboards="refreshEnabledDashboards"
37 - />
31 + <template v-else>
32 + <!-- No Event Sources Warning -->
33 + <n-alert v-if="showNoSourcesWarning" title="No Event Sources Configured" type="warning">
34 + An Event Source needs to be defined for this customer before dashboards can be enabled. Go to the
35 + customer's
36 + <strong>Event Sources</strong>
37 + tab to configure one.
38 + </n-alert>
39 +
40 + <EnabledDashboardsSection
41 + ref="enabledDashboardsSectionRef"
42 + v-model:enabled-dashboards="enabledDashboards"
43 + :customer-code="selectedCustomerCode"
44 + :visible="!showNoSourcesWarning"
45 + :event-sources-list
46 + />
47 + </template>
48 +
49 + <n-drawer
50 + v-model:show="showAddTemplateDrawer"
51 + display-directive="show"
52 + :width="960"
53 + class="max-w-[92vw]"
54 + :trap-focus="false"
55 + >
56 + <n-drawer-content title="Add template" closable :native-scrollbar="false">
57 + <DashboardCategoriesSection
58 + :selected-customer-code
59 + :event-sources-list
60 + :loading-event-sources
61 + :enabled-dashboards
62 + @refresh-enabled-dashboards="refreshEnabledDashboards"
63 + />
64 + </n-drawer-content>
65 + </n-drawer>
66 </div>
67 </template>
68
@@ -42,9 +70,10 @@
70 import type { Customer } from "@/types/customers.d"
71 import type { EnabledDashboard } from "@/types/dashboards.d"
72 import type { EventSource } from "@/types/eventSources.d"
45 -import { NAlert, NFormItem, NSelect, useMessage } from "naive-ui"
73 +import { NAlert, NButton, NDrawer, NDrawerContent, NEmpty, NFormItem, NSelect, useMessage } from "naive-ui"
74 import { computed, onBeforeMount, ref, useTemplateRef, watch } from "vue"
75 import Api from "@/api"
76 +import Icon from "@/components/common/Icon.vue"
77 import DashboardCategoriesSection from "./DashboardCategoriesSection.vue"
78 import EnabledDashboardsSection from "./EnabledDashboardsSection.vue"
79
@@ -54,6 +83,7 @@ const message = useMessage()
83 const loadingCustomers = ref(false)
84 const customersList = ref<Customer[]>([])
85 const selectedCustomerCode = ref<string | null>(null)
86 +const showAddTemplateDrawer = ref(false)
87
88 // ── Enabled dashboards (lista aggiornata da EnabledDashboardsSection via v-model) ──
89 const enabledDashboards = ref<EnabledDashboard[]>([])
@@ -119,6 +149,7 @@ function refreshEnabledDashboards() {
149
150 watch(selectedCustomerCode, code => {
151 eventSourcesList.value = []
152 + showAddTemplateDrawer.value = false
153
154 if (code) {
155 getEventSources(code)
frontend/src/components/dashboards/EnabledDashboardsSection.vue
+6 -6
@@ -1,9 +1,9 @@
1 <template>
2 - <n-card v-if="visible" ref="wrapperRef" size="small">
3 - <template #header>Enabled Dashboards</template>
4 - <template #header-extra>
2 + <div v-if="visible" ref="wrapperRef" class="flex flex-col gap-2">
3 + <div class="flex items-center justify-between">
4 + <p class="text-secondary text-sm">Enabled Dashboards</p>
5 <span class="text-secondary text-sm">{{ enabledDashboards.length }} enabled</span>
6 - </template>
6 + </div>
7
8 <n-data-table
9 bordered
@@ -19,7 +19,7 @@
19 <n-empty description="No enabled dashboards" />
20 </template>
21 </n-data-table>
22 - </n-card>
22 + </div>
23 </template>
24
25 <script setup lang="ts">
@@ -27,7 +27,7 @@ import type { DataTableColumns } from "naive-ui"
27 import type { EnabledDashboard } from "@/types/dashboards.d"
28 import type { EventSource } from "@/types/eventSources.d"
29 import { useElementSize } from "@vueuse/core"
30 -import { NButton, NCard, NDataTable, NEmpty, useDialog, useMessage } from "naive-ui"
30 +import { NButton, NDataTable, NEmpty, useDialog, useMessage } from "naive-ui"
31 import { computed, h, ref, useTemplateRef, watch } from "vue"
32 import { useRouter } from "vue-router"
33 import Api from "@/api"
frontend/src/components/events/ColumnConfig.vue new
+237
@@ -0,0 +1,237 @@
1 +<template>
2 + <div class="flex flex-col gap-6">
3 + <!-- Active columns -->
4 + <section class="flex min-w-0 flex-col gap-3">
5 + <div class="flex items-start justify-between gap-3">
6 + <div>
7 + <p class="text-secondary text-[10px] font-medium tracking-widest uppercase">Active columns</p>
8 + <p class="text-secondary mt-1 text-xs">Order matches table left-to-right</p>
9 + </div>
10 + <span class="text-default shrink-0 font-mono text-xs tabular-nums">{{ localColumns.length }}</span>
11 + </div>
12 +
13 + <n-empty
14 + v-if="!localColumns.length"
15 + size="small"
16 + description="No custom columns"
17 + class="border-border rounded-lg border border-dashed py-6"
18 + >
19 + <template #extra>
20 + <p class="text-secondary max-w-56 text-center text-xs">
21 + Default table columns will be shown until you add fields below.
22 + </p>
23 + </template>
24 + </n-empty>
25 +
26 + <div v-else class="flex flex-col gap-1.5">
27 + <div
28 + v-for="(col, idx) in localColumns"
29 + :key="col.key"
30 + class="bg-default hover:bg-hover-005 group flex items-center gap-2 rounded-md py-2 transition-colors"
31 + >
32 + <span class="text-secondary w-5 shrink-0 text-center font-mono text-[10px] tabular-nums">
33 + {{ idx + 1 }}
34 + </span>
35 + <n-input v-model:value="col.label" size="small" placeholder="Header label" />
36 + <span class="text-secondary min-w-0 flex-1 truncate font-mono text-xs" :title="col.key">
37 + {{ col.key }}
38 + </span>
39 + <div class="flex shrink-0 gap-0.5 opacity-60 transition-opacity group-hover:opacity-100">
40 + <n-button
41 + size="tiny"
42 + quaternary
43 + :disabled="idx === 0"
44 + title="Move up"
45 + @click="moveColumn(idx, -1)"
46 + >
47 + <template #icon>
48 + <Icon :name="ArrowUpIcon" :size="14" />
49 + </template>
50 + </n-button>
51 + <n-button
52 + size="tiny"
53 + quaternary
54 + :disabled="idx === localColumns.length - 1"
55 + title="Move down"
56 + @click="moveColumn(idx, 1)"
57 + >
58 + <template #icon>
59 + <Icon :name="ArrowDownIcon" :size="14" />
60 + </template>
61 + </n-button>
62 + <n-button size="tiny" quaternary type="error" title="Remove column" @click="removeColumn(idx)">
63 + <template #icon>
64 + <Icon :name="CloseIcon" :size="14" />
65 + </template>
66 + </n-button>
67 + </div>
68 + </div>
69 + </div>
70 + </section>
71 +
72 + <!-- Add column from available fields -->
73 + <section class="flex min-w-0 flex-col gap-3">
74 + <div>
75 + <p class="text-secondary text-[10px] font-medium tracking-widest uppercase">Add column</p>
76 + <p class="text-secondary mt-1 text-xs">Pick a mapped field not already in the table</p>
77 + </div>
78 +
79 + <n-input v-model:value="fieldFilter" placeholder="Filter fields…" clearable size="small">
80 + <template #prefix>
81 + <Icon :name="SearchIcon" :size="14" class="text-secondary" />
82 + </template>
83 + </n-input>
84 +
85 + <n-card embedded content-class="p-0!">
86 + <n-scrollbar
87 + v-if="filteredFields.length"
88 + class="max-h-72"
89 + trigger="none"
90 + content-class="flex flex-col gap-0 py-2"
91 + >
92 + <n-button
93 + v-for="field in filteredFields"
94 + :key="field.field"
95 + quaternary
96 + class="[&_.n-button\_\_content]:w-full"
97 + @click="addColumn(field.field)"
98 + >
99 + <div class="flex w-full items-center justify-between gap-3">
100 + <span class="text-default min-w-0 truncate font-mono text-xs">{{ field.field }}</span>
101 + <span class="text-secondary shrink-0 text-[10px] tracking-wider uppercase">
102 + {{ field.type }}
103 + </span>
104 + </div>
105 + </n-button>
106 + </n-scrollbar>
107 +
108 + <div v-else class="text-secondary px-3 py-6 text-center text-xs">
109 + {{ emptyFieldsMessage }}
110 + </div>
111 + </n-card>
112 + </section>
113 + </div>
114 +</template>
115 +
116 +<script setup lang="ts">
117 +import type { FieldMapping } from "@/types/events.d"
118 +import type { DisplayColumn, EventSource } from "@/types/eventSources.d"
119 +import { NButton, NCard, NEmpty, NInput, NScrollbar, useMessage } from "naive-ui"
120 +import { computed, ref, watch } from "vue"
121 +import Api from "@/api"
122 +import Icon from "@/components/common/Icon.vue"
123 +
124 +const props = defineProps<{
125 + open: boolean
126 + eventSource: EventSource | null
127 + fieldMappings: FieldMapping[]
128 + loadingFieldMappings?: boolean
129 +}>()
130 +
131 +const emit = defineEmits<{
132 + close: []
133 + saved: [columns: DisplayColumn[] | null]
134 +}>()
135 +
136 +const SearchIcon = "carbon:search"
137 +const CloseIcon = "carbon:close"
138 +const ArrowUpIcon = "carbon:arrow-up"
139 +const ArrowDownIcon = "carbon:arrow-down"
140 +
141 +const message = useMessage()
142 +
143 +const localColumns = ref<DisplayColumn[]>([])
144 +const fieldFilter = ref("")
145 +const saving = ref(false)
146 +
147 +watch(
148 + () => [props.open, props.eventSource?.id] as const,
149 + ([open]) => {
150 + if (open && props.eventSource) {
151 + localColumns.value = (props.eventSource.displayed_columns ?? []).map(c => ({
152 + key: c.key,
153 + label: c.label,
154 + width: c.width ?? null
155 + }))
156 + fieldFilter.value = ""
157 + }
158 + },
159 + { immediate: true }
160 +)
161 +
162 +const usedKeys = computed(() => new Set(localColumns.value.map(c => c.key)))
163 +
164 +const filteredFields = computed(() => {
165 + const q = fieldFilter.value.trim().toLowerCase()
166 + const all = props.fieldMappings.filter(f => !usedKeys.value.has(f.field))
167 + if (!q) return all
168 + return all.filter(f => f.field.toLowerCase().includes(q))
169 +})
170 +
171 +const emptyFieldsMessage = computed(() => {
172 + if (props.loadingFieldMappings) return "Loading available fields…"
173 + if (!props.fieldMappings.length) return "No field mappings available for this source."
174 + if (fieldFilter.value.trim()) return "No fields match your filter."
175 + return "All mapped fields are already in the table."
176 +})
177 +
178 +function defaultLabelFor(fieldPath: string): string {
179 + const tail = fieldPath.split(".").pop() ?? fieldPath
180 + return tail.replace(/_/g, " ").replace(/\b\w/g, c => c.toUpperCase())
181 +}
182 +
183 +function addColumn(fieldPath: string) {
184 + if (usedKeys.value.has(fieldPath)) return
185 + localColumns.value.push({
186 + key: fieldPath,
187 + label: defaultLabelFor(fieldPath),
188 + width: null
189 + })
190 +}
191 +
192 +function removeColumn(idx: number) {
193 + localColumns.value.splice(idx, 1)
194 +}
195 +
196 +function moveColumn(idx: number, delta: number) {
197 + const target = idx + delta
198 + if (target < 0 || target >= localColumns.value.length) return
199 + const [item] = localColumns.value.splice(idx, 1)
200 + localColumns.value.splice(target, 0, item)
201 +}
202 +
203 +function resetToDefaults() {
204 + localColumns.value = []
205 +}
206 +
207 +function onSave() {
208 + if (!props.eventSource) return
209 + saving.value = true
210 +
211 + const payload = localColumns.value.length ? localColumns.value : null
212 +
213 + Api.siem
214 + .updateEventSource(props.eventSource.id, { displayed_columns: payload })
215 + .then(res => {
216 + if (res.data.success) {
217 + message.success("Columns saved")
218 + emit("saved", payload)
219 + emit("close")
220 + } else {
221 + message.warning(res.data?.message || "Failed to save columns")
222 + }
223 + })
224 + .catch(err => {
225 + message.error(err.response?.data?.message || "Failed to save columns")
226 + })
227 + .finally(() => {
228 + saving.value = false
229 + })
230 +}
231 +
232 +defineExpose({
233 + saving,
234 + resetToDefaults,
235 + onSave
236 +})
237 +</script>
frontend/src/components/events/ColumnConfigModal.vue deleted
-229
@@ -1,229 +0,0 @@
1 -<template>
2 - <n-modal
3 - v-model:show="showModel"
4 - preset="card"
5 - :title="`Configure columns: ${eventSource?.name ?? ''}`"
6 - style="width: 720px; max-width: 92vw"
7 - :bordered="false"
8 - :mask-closable="false"
9 - >
10 - <div class="flex flex-col gap-4">
11 - <!-- Active columns -->
12 - <div class="flex flex-col gap-2">
13 - <div class="flex items-center justify-between">
14 - <span class="text-sm font-medium">Active columns ({{ localColumns.length }})</span>
15 - <span class="text-xs opacity-60">Order matches table left-to-right</span>
16 - </div>
17 -
18 - <div
19 - v-if="!localColumns.length"
20 - class="rounded border border-dashed p-4 text-center text-sm opacity-60"
21 - >
22 - No columns configured. Defaults from the table will be shown.
23 - </div>
24 -
25 - <div v-else class="flex flex-col gap-1">
26 - <div
27 - v-for="(col, idx) in localColumns"
28 - :key="col.key"
29 - class="bg-default flex items-center gap-2 rounded border px-2 py-1.5"
30 - >
31 - <span class="text-xs opacity-50" style="width: 24px">{{ idx + 1 }}</span>
32 - <n-input
33 - v-model:value="col.label"
34 - size="small"
35 - placeholder="Column header"
36 - style="flex: 1; max-width: 200px"
37 - />
38 - <span
39 - class="font-mono text-xs opacity-60"
40 - style="
41 - flex: 1;
42 - min-width: 0;
43 - overflow: hidden;
44 - text-overflow: ellipsis;
45 - white-space: nowrap;
46 - "
47 - >
48 - {{ col.key }}
49 - </span>
50 - <n-button size="tiny" :disabled="idx === 0" @click="moveColumn(idx, -1)">
51 - <template #icon>
52 - <Icon :name="ArrowUpIcon" :size="14" />
53 - </template>
54 - </n-button>
55 - <n-button size="tiny" :disabled="idx === localColumns.length - 1" @click="moveColumn(idx, 1)">
56 - <template #icon>
57 - <Icon :name="ArrowDownIcon" :size="14" />
58 - </template>
59 - </n-button>
60 - <n-button size="tiny" type="error" quaternary @click="removeColumn(idx)">
61 - <template #icon>
62 - <Icon :name="CloseIcon" :size="14" />
63 - </template>
64 - </n-button>
65 - </div>
66 - </div>
67 - </div>
68 -
69 - <!-- Add column from available fields -->
70 - <div class="flex flex-col gap-2">
71 - <span class="text-sm font-medium">Add a column</span>
72 - <n-input v-model:value="fieldFilter" placeholder="Filter available fields..." clearable size="small">
73 - <template #prefix>
74 - <Icon :name="SearchIcon" :size="14" class="opacity-50" />
75 - </template>
76 - </n-input>
77 - <div class="max-h-60 overflow-y-auto rounded border">
78 - <div
79 - v-for="field in filteredFields"
80 - :key="field.field"
81 - class="hover:bg-hover-005 flex cursor-pointer items-center justify-between gap-2 px-2 py-1.5 text-sm"
82 - @click="addColumn(field.field)"
83 - >
84 - <span class="font-mono">{{ field.field }}</span>
85 - <span class="flex items-center gap-2">
86 - <span class="text-xs opacity-50">{{ field.type }}</span>
87 - <n-button size="tiny" quaternary>
88 - <template #icon>
89 - <Icon :name="AddIcon" :size="14" />
90 - </template>
91 - </n-button>
92 - </span>
93 - </div>
94 - <div v-if="!filteredFields.length" class="p-3 text-center text-sm opacity-60">
95 - {{ fieldMappings.length ? "No fields match your filter." : "Loading available fields..." }}
96 - </div>
97 - </div>
98 - </div>
99 - </div>
100 -
101 - <template #footer>
102 - <div class="flex items-center justify-between gap-2">
103 - <n-button quaternary type="warning" @click="resetToDefaults">Reset to defaults</n-button>
104 - <div class="flex gap-2">
105 - <n-button @click="showModel = false">Cancel</n-button>
106 - <n-button type="primary" :loading="saving" @click="onSave">Save</n-button>
107 - </div>
108 - </div>
109 - </template>
110 - </n-modal>
111 -</template>
112 -
113 -<script setup lang="ts">
114 -import type { FieldMapping } from "@/types/events.d"
115 -import type { DisplayColumn, EventSource } from "@/types/eventSources.d"
116 -import { NButton, NInput, NModal, useMessage } from "naive-ui"
117 -import { computed, ref, watch } from "vue"
118 -import Api from "@/api"
119 -import Icon from "@/components/common/Icon.vue"
120 -
121 -const props = defineProps<{
122 - show: boolean
123 - eventSource: EventSource | null
124 - fieldMappings: FieldMapping[]
125 -}>()
126 -
127 -const emit = defineEmits<{
128 - "update:show": [value: boolean]
129 - saved: [columns: DisplayColumn[] | null]
130 -}>()
131 -
132 -const SearchIcon = "carbon:search"
133 -const AddIcon = "carbon:add"
134 -const CloseIcon = "carbon:close"
135 -const ArrowUpIcon = "carbon:arrow-up"
136 -const ArrowDownIcon = "carbon:arrow-down"
137 -
138 -const message = useMessage()
139 -
140 -const showModel = computed({
141 - get: () => props.show,
142 - set: v => emit("update:show", v)
143 -})
144 -
145 -const localColumns = ref<DisplayColumn[]>([])
146 -const fieldFilter = ref("")
147 -const saving = ref(false)
148 -
149 -// Re-seed when the modal opens or the source changes
150 -watch(
151 - () => [props.show, props.eventSource?.id] as const,
152 - ([show]) => {
153 - if (show && props.eventSource) {
154 - localColumns.value = (props.eventSource.displayed_columns ?? []).map(c => ({
155 - key: c.key,
156 - label: c.label,
157 - width: c.width ?? null
158 - }))
159 - fieldFilter.value = ""
160 - }
161 - },
162 - { immediate: true }
163 -)
164 -
165 -const usedKeys = computed(() => new Set(localColumns.value.map(c => c.key)))
166 -
167 -const filteredFields = computed(() => {
168 - const q = fieldFilter.value.trim().toLowerCase()
169 - const all = props.fieldMappings.filter(f => !usedKeys.value.has(f.field))
170 - if (!q) return all.slice(0, 50)
171 - return all.filter(f => f.field.toLowerCase().includes(q)).slice(0, 50)
172 -})
173 -
174 -function defaultLabelFor(fieldPath: string): string {
175 - // Take the last dotted segment, replace _ with spaces, title-case
176 - const tail = fieldPath.split(".").pop() ?? fieldPath
177 - return tail.replace(/_/g, " ").replace(/\b\w/g, c => c.toUpperCase())
178 -}
179 -
180 -function addColumn(fieldPath: string) {
181 - if (usedKeys.value.has(fieldPath)) return
182 - localColumns.value.push({
183 - key: fieldPath,
184 - label: defaultLabelFor(fieldPath),
185 - width: null
186 - })
187 -}
188 -
189 -function removeColumn(idx: number) {
190 - localColumns.value.splice(idx, 1)
191 -}
192 -
193 -function moveColumn(idx: number, delta: number) {
194 - const target = idx + delta
195 - if (target < 0 || target >= localColumns.value.length) return
196 - const [item] = localColumns.value.splice(idx, 1)
197 - localColumns.value.splice(target, 0, item)
198 -}
199 -
200 -function resetToDefaults() {
201 - localColumns.value = []
202 -}
203 -
204 -function onSave() {
205 - if (!props.eventSource) return
206 - saving.value = true
207 -
208 - // Empty list means "use defaults" — send null so the backend stores NULL.
209 - const payload = localColumns.value.length ? localColumns.value : null
210 -
211 - Api.siem
212 - .updateEventSource(props.eventSource.id, { displayed_columns: payload })
213 - .then(res => {
214 - if (res.data.success) {
215 - message.success("Columns saved")
216 - emit("saved", payload)
217 - showModel.value = false
218 - } else {
219 - message.warning(res.data?.message || "Failed to save columns")
220 - }
221 - })
222 - .catch(err => {
223 - message.error(err.response?.data?.message || "Failed to save columns")
224 - })
225 - .finally(() => {
226 - saving.value = false
227 - })
228 -}
229 -</script>
frontend/src/components/events/EventDetail.vue new
+81
@@ -0,0 +1,81 @@
1 +<template>
2 + <div v-if="event" class="flex flex-col gap-3">
3 + <div class="flex items-center justify-between gap-3">
4 + <p class="text-secondary text-[10px] font-medium tracking-widest uppercase">Event fields</p>
5 + <span class="text-default font-mono text-xs tabular-nums">{{ sortedFields.length }}</span>
6 + </div>
7 +
8 + <dl class="border-border divide-border divide-y rounded-lg border">
9 + <div
10 + v-for="[key, value] in sortedFields"
11 + :key
12 + class="group hover:bg-hover-005 flex items-start gap-3 px-3 py-2.5 transition-colors"
13 + >
14 + <dt class="text-secondary max-w-44 min-w-36 shrink-0 truncate font-mono text-xs" :title="key">
15 + {{ key }}
16 + </dt>
17 + <dd class="flex min-w-0 flex-1 items-start justify-end gap-3">
18 + <span class="text-default min-w-0 flex-1 text-right font-mono text-xs break-all">
19 + {{ formatValue(value) }}
20 + </span>
21 + <div class="flex shrink-0 gap-0.5 opacity-0 transition-opacity group-hover:opacity-100">
22 + <n-tooltip placement="top" class="px-2! py-1! text-xs!">
23 + <template #trigger>
24 + <n-button size="tiny" quaternary @click="emit('filter-add', key, String(value))">
25 + <template #icon>
26 + <Icon :name="FilterAddIcon" :size="14" />
27 + </template>
28 + </n-button>
29 + </template>
30 + Include in query
31 + </n-tooltip>
32 + <n-tooltip placement="top" class="px-2! py-1! text-xs!">
33 + <template #trigger>
34 + <n-button size="tiny" quaternary @click="emit('filter-exclude', key, String(value))">
35 + <template #icon>
36 + <Icon :name="FilterRemoveIcon" :size="14" />
37 + </template>
38 + </n-button>
39 + </template>
40 + Exclude from query
41 + </n-tooltip>
42 + </div>
43 + </dd>
44 + </div>
45 + </dl>
46 + </div>
47 +
48 + <n-empty v-else description="No event selected" class="h-48 justify-center" />
49 +</template>
50 +
51 +<script setup lang="ts">
52 +import type { EventSearchResult } from "@/types/events.d"
53 +import { NButton, NEmpty, NTooltip } from "naive-ui"
54 +import { computed } from "vue"
55 +import Icon from "@/components/common/Icon.vue"
56 +
57 +const props = defineProps<{
58 + event: EventSearchResult | null
59 +}>()
60 +
61 +const emit = defineEmits<{
62 + "filter-add": [field: string, value: string]
63 + "filter-exclude": [field: string, value: string]
64 +}>()
65 +
66 +const FilterAddIcon = "carbon:filter"
67 +const FilterRemoveIcon = "carbon:filter-remove"
68 +
69 +const sortedFields = computed(() => {
70 + if (!props.event) return []
71 + return Object.entries(props.event)
72 + .filter(([key]) => !key.startsWith("_"))
73 + .sort(([a], [b]) => a.localeCompare(b))
74 +})
75 +
76 +function formatValue(value: unknown): string {
77 + if (value === null || value === undefined) return "—"
78 + if (typeof value === "object") return JSON.stringify(value)
79 + return String(value)
80 +}
81 +</script>
frontend/src/components/events/EventDetailDrawer.vue deleted
-84
@@ -1,84 +0,0 @@
1 -<template>
2 - <n-drawer v-model:show="show" display-directive="show" :trap-focus="false" style="max-width: 90vw; width: 600px">
3 - <n-drawer-content title="Event Details" closable :native-scrollbar="false">
4 - <template v-if="event">
5 - <div class="flex flex-col gap-1">
6 - <div
7 - v-for="[key, value] in sortedFields"
8 - :key
9 - class="field-row flex items-start gap-2 rounded px-2 py-1.5 hover:bg-[var(--hover-005-color)]"
10 - >
11 - <span class="min-w-36 shrink-0 font-mono text-xs font-semibold opacity-70">{{ key }}</span>
12 - <span class="min-w-0 flex-1 text-sm break-all">{{ formatValue(value) }}</span>
13 - <div class="actions-container flex shrink-0 gap-1">
14 - <n-button
15 - size="tiny"
16 - quaternary
17 - title="Filter for this value"
18 - @click="$emit('filter-add', key, String(value))"
19 - >
20 - <template #icon>
21 - <Icon :name="FilterAddIcon" :size="14" />
22 - </template>
23 - </n-button>
24 - <n-button
25 - size="tiny"
26 - quaternary
27 - title="Exclude this value"
28 - @click="$emit('filter-exclude', key, String(value))"
29 - >
30 - <template #icon>
31 - <Icon :name="FilterRemoveIcon" :size="14" />
32 - </template>
33 - </n-button>
34 - </div>
35 - </div>
36 - </div>
37 - </template>
38 - <n-empty v-else description="No event selected" class="h-48 justify-center" />
39 - </n-drawer-content>
40 - </n-drawer>
41 -</template>
42 -
43 -<script setup lang="ts">
44 -import type { EventSearchResult } from "@/types/events.d"
45 -import { NButton, NDrawer, NDrawerContent, NEmpty } from "naive-ui"
46 -import { computed } from "vue"
47 -import Icon from "@/components/common/Icon.vue"
48 -
49 -const props = defineProps<{
50 - event: EventSearchResult | null
51 -}>()
52 -defineEmits<{
53 - "filter-add": [field: string, value: string]
54 - "filter-exclude": [field: string, value: string]
55 -}>()
56 -const FilterAddIcon = "carbon:filter"
57 -const FilterRemoveIcon = "carbon:filter-remove"
58 -
59 -const show = defineModel<boolean>("show", { default: false })
60 -
61 -const sortedFields = computed(() => {
62 - if (!props.event) return []
63 - return Object.entries(props.event)
64 - .filter(([key]) => !key.startsWith("_"))
65 - .sort(([a], [b]) => a.localeCompare(b))
66 -})
67 -
68 -function formatValue(value: unknown): string {
69 - if (value === null || value === undefined) return "-"
70 - if (typeof value === "object") return JSON.stringify(value)
71 - return String(value)
72 -}
73 -</script>
74 -
75 -<style scoped>
76 -.actions-container {
77 - opacity: 0;
78 - transition: opacity 0.15s;
79 -}
80 -
81 -.field-row:hover .actions-container {
82 - opacity: 1;
83 -}
84 -</style>
frontend/src/components/events/EventSearch.vue
+120 -535
@@ -1,357 +1,124 @@
1 <template>
2 <div class="flex flex-col gap-4">
3 - <!-- No Event Sources Warning -->
4 - <n-alert v-if="showNoSourcesWarning" title="No Event Sources Configured" type="warning" closable>
5 - An Event Source needs to be defined for this customer before events can be searched. Go to the customer's
6 - <strong>Event Sources</strong>
7 - tab to configure one.
8 - </n-alert>
9 -
10 - <!-- Filters Bar -->
11 - <n-card size="small">
12 - <div class="flex flex-col gap-3">
13 - <div class="flex flex-wrap items-end gap-3">
14 - <div class="flex flex-col gap-1">
15 - <span class="text-xs opacity-60">Customer</span>
16 - <n-select
17 - v-model:value="selectedCustomerCode"
18 - :options="customersOptions"
19 - placeholder="Select Customer"
20 - filterable
21 - :loading="loadingCustomers"
22 - style="width: 260px"
23 - @update:value="onCustomerChange"
24 - />
25 - </div>
26 - <div class="flex flex-col gap-1">
27 - <span class="text-xs opacity-60">Event Source</span>
28 - <n-select
29 - v-model:value="selectedSourceName"
30 - :options="eventSourceOptions"
31 - placeholder="Select Source"
32 - filterable
33 - :loading="loadingEventSources"
34 - :disabled="!selectedCustomerCode"
35 - style="width: 220px"
36 - @update:value="onSourceChange"
37 - />
38 - </div>
39 - <div class="flex flex-col gap-1">
40 - <span class="text-xs opacity-60">Time Range</span>
41 - <n-select v-model:value="timerange" :options="timerangeOptions" style="width: 140px" />
42 - </div>
43 - <div v-if="timerange === 'custom'" class="flex flex-col gap-1">
44 - <span class="text-xs opacity-60">Custom Range</span>
45 - <n-date-picker
46 - v-model:value="customDateRange"
47 - type="datetimerange"
48 - clearable
49 - style="width: 380px"
50 - />
51 - </div>
52 - <div class="flex flex-col gap-1">
53 - <span class="text-xs opacity-60">Page Size</span>
54 - <n-select v-model:value="pageSize" :options="pageSizeOptions" style="width: 110px" />
55 - </div>
56 - <n-button
57 - type="primary"
58 - :disabled="!selectedCustomerCode || !selectedSourceName"
59 - :loading="loadingEvents"
60 - @click="searchEvents()"
61 - >
62 - <template #icon>
63 - <Icon :name="SearchIcon" :size="16" />
64 - </template>
65 - Search
66 - </n-button>
67 - <n-button
68 - quaternary
69 - :disabled="!selectedEventSource"
70 - title="Configure which columns to display for this event source"
71 - @click="showColumnConfig = true"
72 - >
73 - <template #icon>
74 - <Icon :name="SettingsIcon" :size="16" />
75 - </template>
76 - Columns
77 - </n-button>
78 - </div>
79 -
80 - <!-- Query Bar with Autocomplete -->
81 - <div class="relative">
82 - <n-input
83 - v-model:value="query"
84 - placeholder="Lucene query (e.g. agent_name:server01 AND rule_level:>=10)"
85 - clearable
86 - @keydown.enter="searchEvents()"
87 - @keydown.tab.prevent="acceptSuggestion"
88 - @keydown.escape="showSuggestions = false"
89 - @input="onQueryInput"
90 - >
91 - <template #prefix>
92 - <Icon :name="CodeIcon" :size="16" class="opacity-50" />
93 - </template>
94 - </n-input>
95 - <!-- Autocomplete dropdown -->
96 - <div
97 - v-if="showSuggestions && filteredSuggestions.length"
98 - class="suggestions-dropdown bg-default absolute top-full right-0 left-0 z-50 mt-1 max-h-48 overflow-y-auto rounded-lg border shadow-lg"
99 - >
100 - <div
101 - v-for="(suggestion, index) in filteredSuggestions"
102 - :key="suggestion.field"
103 - class="suggestion-item hover:bg-hover-005 flex cursor-pointer items-center justify-between px-3 py-1.5 text-sm"
104 - :class="{ 'bg-hover-005': index === activeSuggestionIndex }"
105 - @mousedown.prevent="applySuggestion(suggestion.field)"
106 - >
107 - <span class="font-mono">{{ suggestion.field }}</span>
108 - <span class="text-xs opacity-50">{{ suggestion.type }}</span>
109 - </div>
110 - </div>
111 - </div>
112 - </div>
113 - </n-card>
3 + <EventSearchFilters
4 + v-model:query="query"
5 + :loading-events
6 + @search="handleFiltersSearch"
7 + @loaded="handleFiltersLoaded"
8 + @field-mappings="fieldMappings = $event"
9 + @field-mappings-loading="fieldMappingsLoading = $event"
10 + />
11
115 - <!-- Results -->
116 - <n-spin :show="loadingEvents">
117 - <n-card v-if="events.length || loadingEvents" size="small">
118 - <div class="mb-2 flex items-center justify-between">
119 - <span class="text-sm opacity-60">
120 - {{ totalEvents }} event{{ totalEvents !== 1 ? "s" : "" }} found
121 - </span>
122 - </div>
123 - <n-data-table
124 - :columns
125 - :data="events"
126 - :bordered="false"
127 - :single-line="false"
128 - size="small"
129 - :row-key="(row: EventSearchResult) => row._id || JSON.stringify(row)"
130 - :row-props
131 - max-height="calc(100vh - 360px)"
132 - virtual-scroll
133 - />
134 - <div v-if="scrollId && events.length < totalEvents" class="mt-3 flex justify-center">
135 - <n-button :loading="loadingMore" @click="loadMoreEvents">Load More</n-button>
136 - </div>
137 - </n-card>
138 - <n-empty
139 - v-else-if="!loadingEvents && hasSearched"
140 - description="No events found"
141 - class="h-48 justify-center"
142 - />
143 - </n-spin>
12 + <EventSearchResults
13 + :events
14 + :total-events
15 + :loading-events
16 + :loading-more
17 + :has-searched
18 + :scroll-id
19 + :event-source="selectedEventSource"
20 + @load-more="loadMoreEvents"
21 + @configure-columns="showColumnConfig = true"
22 + @row-select="openEventDetail"
23 + />
24
145 - <!-- Event Detail Drawer -->
146 - <EventDetailDrawer
25 + <n-drawer
26 v-model:show="showDetailDrawer"
148 - :event="selectedEvent"
149 - @filter-add="addFilterFromDetail"
150 - @filter-exclude="excludeFilterFromDetail"
151 - />
27 + display-directive="show"
28 + :trap-focus="false"
29 + :style="{ width: 'min(600px, 90vw)' }"
30 + >
31 + <n-drawer-content title="Event Details" closable :native-scrollbar="false">
32 + <EventDetail
33 + :event="selectedEvent"
34 + @filter-add="addFilterFromDetail"
35 + @filter-exclude="excludeFilterFromDetail"
36 + />
37 + </n-drawer-content>
38 + </n-drawer>
39
153 - <!-- Column Config Modal -->
154 - <ColumnConfigModal
40 + <n-modal
41 v-model:show="showColumnConfig"
156 - :event-source="selectedEventSource"
157 - :field-mappings
158 - @saved="onColumnsSaved"
159 - />
42 + preset="card"
43 + display-directive="show"
44 + :title="`Configure columns: ${selectedEventSource?.name ?? ''}`"
45 + :style="{ width: 'min(720px, 92vw)' }"
46 + :mask-closable="false"
47 + >
48 + <ColumnConfig
49 + ref="columnConfigRef"
50 + :open="showColumnConfig"
51 + :event-source="selectedEventSource"
52 + :field-mappings
53 + :loading-field-mappings="fieldMappingsLoading"
54 + @close="showColumnConfig = false"
55 + @saved="onColumnsSaved"
56 + />
57 +
58 + <template #footer>
59 + <div class="flex items-center justify-between gap-2">
60 + <n-button text @click="columnConfigRef?.resetToDefaults()">Reset to defaults</n-button>
61 + <div class="flex gap-2">
62 + <n-button @click="showColumnConfig = false">Cancel</n-button>
63 + <n-button type="primary" :loading="columnConfigRef?.saving" @click="columnConfigRef?.onSave()">
64 + Save
65 + </n-button>
66 + </div>
67 + </div>
68 + </template>
69 + </n-modal>
70 </div>
71 </template>
72
73 <script setup lang="ts">
164 -import type { DataTableColumns } from "naive-ui"
165 -import type { Customer } from "@/types/customers.d"
74 +import type { EventSearchFiltersLoad, EventSearchFiltersParams } from "./EventSearchFilters.vue"
75 import type { EventSearchResult, FieldMapping } from "@/types/events.d"
167 -import type { DisplayColumn, EventSource } from "@/types/eventSources.d"
168 -import { NAlert, NButton, NCard, NDataTable, NDatePicker, NEmpty, NInput, NSelect, NSpin, useMessage } from "naive-ui"
169 -import { computed, h, nextTick, onBeforeMount, ref } from "vue"
170 -import { useRoute } from "vue-router"
76 +import type { DisplayColumn } from "@/types/eventSources.d"
77 +import { NButton, NDrawer, NDrawerContent, NModal, useMessage } from "naive-ui"
78 +import { computed, ref, useTemplateRef } from "vue"
79 import Api from "@/api"
172 -import Icon from "@/components/common/Icon.vue"
173 -import ColumnConfigModal from "./ColumnConfigModal.vue"
174 -import EventDetailDrawer from "./EventDetailDrawer.vue"
175 -
176 -const route = useRoute()
177 -
178 -const SearchIcon = "carbon:search"
179 -const CodeIcon = "carbon:code"
180 -const SettingsIcon = "carbon:settings"
181 -const FIELD_TOKEN_REGEX = /(?:^|[\s(])([a-z_][\w.]*)$/i
80 +import ColumnConfig from "./ColumnConfig.vue"
81 +import EventDetail from "./EventDetail.vue"
82 +import EventSearchFilters from "./EventSearchFilters.vue"
83 +import EventSearchResults from "./EventSearchResults.vue"
84
85 const message = useMessage()
86
185 -// -- Customer selection --
186 -const loadingCustomers = ref(false)
187 -const customersList = ref<Customer[]>([])
188 -const selectedCustomerCode = ref<string | null>(null)
189 -
190 -const customersOptions = computed(() =>
191 - customersList.value.map(o => ({ label: `#${o.customer_code} - ${o.customer_name}`, value: o.customer_code }))
192 -)
193 -
194 -function getCustomers() {
195 - loadingCustomers.value = true
196 - return Api.customers
197 - .getCustomers()
198 - .then(res => {
199 - if (res.data.success) {
200 - customersList.value = res.data?.customers || []
201 - } else {
202 - message.warning(res.data?.message || "An error occurred. Please try again later.")
203 - }
204 - })
205 - .catch(err => {
206 - message.error(err.response?.data?.message || "An error occurred. Please try again later.")
207 - })
208 - .finally(() => {
209 - loadingCustomers.value = false
210 - })
211 -}
212 -
213 -// -- Event Source selection --
214 -const loadingEventSources = ref(false)
215 -const eventSourcesList = ref<EventSource[]>([])
216 -const selectedSourceName = ref<string | null>(null)
217 -
218 -const eventSourceOptions = computed(() =>
219 - eventSourcesList.value.filter(s => s.enabled).map(s => ({ label: `${s.name} (${s.event_type})`, value: s.name }))
220 -)
221 -
222 -const showNoSourcesWarning = computed(
223 - () => selectedCustomerCode.value && !loadingEventSources.value && eventSourcesList.value.length === 0
224 -)
225 -
226 -const selectedEventSource = computed<EventSource | null>(
227 - () => eventSourcesList.value.find(s => s.name === selectedSourceName.value) ?? null
228 -)
229 -
230 -// -- Field mappings / autocomplete --
231 -const fieldMappings = ref<FieldMapping[]>([])
232 -
233 -function getEventSources(customerCode: string) {
234 - loadingEventSources.value = true
235 - eventSourcesList.value = []
236 - selectedSourceName.value = null
237 - fieldMappings.value = []
238 -
239 - Api.siem
240 - .getEventSources(customerCode)
241 - .then(res => {
242 - if (res.data.success) {
243 - eventSourcesList.value = res.data?.event_sources || []
244 - } else {
245 - message.warning(res.data?.message || "An error occurred. Please try again later.")
246 - }
247 - })
248 - .catch(err => {
249 - message.error(err.response?.data?.message || "An error occurred. Please try again later.")
250 - })
251 - .finally(() => {
252 - loadingEventSources.value = false
253 - })
254 -}
255 -
256 -function onCustomerChange(code: string) {
257 - resetResults()
258 - if (code) {
259 - getEventSources(code)
260 - }
261 -}
262 -
263 -function onSourceChange() {
264 - resetResults()
265 - if (selectedCustomerCode.value && selectedSourceName.value) {
266 - loadFieldMappings()
267 - }
268 -}
269 -
270 -// -- Search parameters --
271 -const timerange = ref("24h")
272 -const timerangeOptions = [
273 - { label: "1 hour", value: "1h" },
274 - { label: "6 hours", value: "6h" },
275 - { label: "24 hours", value: "24h" },
276 - { label: "3 days", value: "3d" },
277 - { label: "7 days", value: "7d" },
278 - { label: "14 days", value: "14d" },
279 - { label: "30 days", value: "30d" },
280 - { label: "Custom", value: "custom" }
281 -]
282 -const customDateRange = ref<[number, number] | null>(null)
283 -
284 -const pageSize = ref(50)
285 -const pageSizeOptions = [
286 - { label: "25", value: 25 },
287 - { label: "50", value: 50 },
288 - { label: "100", value: 100 },
289 - { label: "250", value: 250 }
290 -]
291 -
87 +const searchFormParams = ref<EventSearchFiltersParams | null>(null)
88 +const searchFormLoad = ref<EventSearchFiltersLoad | null>(null)
89 const query = ref("")
90 +const fieldMappings = ref<FieldMapping[]>([])
91 +const fieldMappingsLoading = ref(false)
92
294 -const showSuggestions = ref(false)
295 -const activeSuggestionIndex = ref(0)
296 -
297 -function loadFieldMappings() {
298 - if (!selectedCustomerCode.value || !selectedSourceName.value) return
299 -
300 - Api.siem
301 - .getFieldMappings(selectedCustomerCode.value, selectedSourceName.value)
302 - .then(res => {
303 - if (res.data.success) {
304 - fieldMappings.value = res.data.fields || []
305 - }
306 - })
307 - .catch(() => {
308 - // Silent fail - autocomplete is optional
309 - })
310 -}
93 +const events = ref<EventSearchResult[]>([])
94 +const totalEvents = ref(0)
95 +const scrollId = ref<string | null>(null)
96 +const loadingEvents = ref(false)
97 +const loadingMore = ref(false)
98 +const hasSearched = ref(false)
99
312 -const currentFieldToken = computed(() => {
313 - if (!query.value) return ""
314 - const cursorPos = query.value.length
315 - const before = query.value.substring(0, cursorPos)
316 - // Match the last word being typed (field name token before a colon or standalone)
317 - const match = before.match(FIELD_TOKEN_REGEX)
318 - return match ? match[1] : ""
319 -})
100 +const showColumnConfig = ref(false)
101 +const showDetailDrawer = ref(false)
102 +const selectedEvent = ref<EventSearchResult | null>(null)
103 +const columnConfigRef = useTemplateRef("columnConfigRef")
104
321 -const filteredSuggestions = computed(() => {
322 - const token = currentFieldToken.value.toLowerCase()
323 - if (!token || token.length < 2) return []
324 - return fieldMappings.value.filter(f => f.field.toLowerCase().includes(token)).slice(0, 20)
105 +const selectedEventSource = computed(() => {
106 + const sourceName = searchFormParams.value?.sourceName
107 + const sources = searchFormLoad.value?.eventSources
108 + if (!sourceName || !sources) return null
109 + return sources.find(s => s.name === sourceName) ?? null
110 })
111
327 -function onQueryInput() {
328 - showSuggestions.value = currentFieldToken.value.length >= 2 && filteredSuggestions.value.length > 0
329 - activeSuggestionIndex.value = 0
330 -}
331 -
332 -function applySuggestion(fieldName: string) {
333 - const token = currentFieldToken.value
334 - if (token) {
335 - const lastIndex = query.value.lastIndexOf(token)
336 - query.value = `${query.value.substring(0, lastIndex) + fieldName}:`
337 - }
338 - showSuggestions.value = false
112 +function handleFiltersSearch(params: EventSearchFiltersParams) {
113 + searchFormParams.value = params
114 + fieldMappings.value = params.fieldMappings
115 + searchEvents()
116 }
117
341 -function acceptSuggestion() {
342 - if (showSuggestions.value && filteredSuggestions.value.length > 0) {
343 - applySuggestion(filteredSuggestions.value[activeSuggestionIndex.value].field)
344 - }
118 +function handleFiltersLoaded(load: EventSearchFiltersLoad) {
119 + searchFormLoad.value = load
120 }
121
347 -// -- Events data --
348 -const events = ref<EventSearchResult[]>([])
349 -const totalEvents = ref(0)
350 -const scrollId = ref<string | null>(null)
351 -const loadingEvents = ref(false)
352 -const loadingMore = ref(false)
353 -const hasSearched = ref(false)
354 -
122 function resetResults() {
123 events.value = []
124 totalEvents.value = 0
@@ -360,25 +127,26 @@ function resetResults() {
127 }
128
129 function searchEvents() {
363 - if (!selectedCustomerCode.value || !selectedSourceName.value) return
130 + const params = searchFormParams.value
131 + if (!params?.customerCode || !params.sourceName) return
132
133 loadingEvents.value = true
134 hasSearched.value = true
135 resetResults()
136
369 - const params: { timerange?: string; page_size: number; query?: string; time_from?: string; time_to?: string } = {
370 - page_size: pageSize.value,
371 - query: query.value || undefined
137 + const apiParams: { timerange?: string; page_size: number; query?: string; time_from?: string; time_to?: string } = {
138 + page_size: params.pageSize,
139 + query: params.query || undefined
140 }
373 - if (timerange.value === "custom" && customDateRange.value) {
374 - params.time_from = new Date(customDateRange.value[0]).toISOString()
375 - params.time_to = new Date(customDateRange.value[1]).toISOString()
141 + if (params.timeMode === "absolute" && params.timeFrom && params.timeTo) {
142 + apiParams.time_from = new Date(params.timeFrom).toISOString()
143 + apiParams.time_to = new Date(params.timeTo).toISOString()
144 } else {
377 - params.timerange = timerange.value === "custom" ? "24h" : timerange.value
145 + apiParams.timerange = params.timerange
146 }
147
148 Api.siem
381 - .queryEvents(selectedCustomerCode.value, selectedSourceName.value, params)
149 + .queryEvents(params.customerCode, params.sourceName, apiParams)
150 .then(res => {
151 if (res.data.success) {
152 events.value = res.data.events || []
@@ -397,12 +165,13 @@ function searchEvents() {
165 }
166
167 function loadMoreEvents() {
400 - if (!selectedCustomerCode.value || !selectedSourceName.value || !scrollId.value) return
168 + const params = searchFormParams.value
169 + if (!params?.customerCode || !params.sourceName || !scrollId.value) return
170
171 loadingMore.value = true
172
173 Api.siem
405 - .queryEvents(selectedCustomerCode.value, selectedSourceName.value, {
174 + .queryEvents(params.customerCode, params.sourceName, {
175 scroll_id: scrollId.value
176 })
177 .then(res => {
@@ -421,134 +190,23 @@ function loadMoreEvents() {
190 })
191 }
192
424 -// -- Table columns --
425 -// Default columns we fall back to when an event source has no displayed_columns
426 -// configured. These keep the prior behaviour for un-customised sources.
427 -const defaultColumns: DataTableColumns<EventSearchResult> = [
428 - {
429 - title: "Timestamp",
430 - key: "timestamp",
431 - width: 180,
432 - sorter: (a, b) => {
433 - const timeA = a.timestamp || a["@timestamp"] || ""
434 - const timeB = b.timestamp || b["@timestamp"] || ""
435 - return new Date(timeA).getTime() - new Date(timeB).getTime()
436 - },
437 - render(row) {
438 - const ts = row.timestamp || row["@timestamp"]
439 - if (!ts) return "-"
440 - return new Date(ts).toLocaleString()
441 - }
442 - },
443 - {
444 - title: "Source",
445 - key: "agent_name",
446 - width: 140,
447 - ellipsis: { tooltip: true },
448 - render(row) {
449 - return row.agent_name || row.source || "-"
450 - }
451 - },
452 - {
453 - title: "Rule",
454 - key: "rule_description",
455 - ellipsis: { tooltip: true },
456 - render(row) {
457 - return row.rule_description || row.rule_id || "-"
458 - }
459 - },
460 - {
461 - title: "Level",
462 - key: "rule_level",
463 - width: 80,
464 - sorter: (a, b) => (Number(a.rule_level) || 0) - (Number(b.rule_level) || 0),
465 - render(row) {
466 - if (row.rule_level === undefined || row.rule_level === null) return "-"
467 - const level = Number(row.rule_level)
468 - let type: "default" | "warning" | "error" | "success" | "info" = "default"
469 - if (level >= 12) type = "error"
470 - else if (level >= 8) type = "warning"
471 - else if (level >= 4) type = "info"
472 - return h("span", { class: `level-${type}` }, String(row.rule_level))
473 - }
474 - },
475 - {
476 - title: "Summary",
477 - key: "full_log",
478 - ellipsis: { tooltip: true },
479 - render(row) {
480 - return row.full_log || row.data || row.message || "-"
481 - }
482 - }
483 -]
484 -
485 -/** Walk a dotted path (e.g. "agent.name") through a nested object. */
486 -function getNestedValue(obj: EventSearchResult, path: string): unknown {
487 - return path.split(".").reduce<unknown>((acc, segment) => {
488 - if (acc && typeof acc === "object") {
489 - return (acc as Record<string, unknown>)[segment]
490 - }
491 - return undefined
492 - }, obj)
193 +function openEventDetail(event: EventSearchResult) {
194 + selectedEvent.value = event
195 + showDetailDrawer.value = true
196 }
197
495 -function formatCellValue(val: unknown): string {
496 - if (val === undefined || val === null || val === "") return "-"
497 - if (Array.isArray(val)) return val.map(v => (v === null || v === undefined ? "" : String(v))).join(", ")
498 - if (typeof val === "object") return JSON.stringify(val)
499 - return String(val)
500 -}
501 -
502 -function buildColumnFromConfig(col: DisplayColumn): DataTableColumns<EventSearchResult>[number] {
503 - return {
504 - title: col.label || col.key,
505 - key: col.key,
506 - width: col.width || undefined,
507 - ellipsis: { tooltip: true },
508 - render(row: EventSearchResult) {
509 - return formatCellValue(getNestedValue(row, col.key))
510 - }
511 - }
512 -}
513 -
514 -const columns = computed<DataTableColumns<EventSearchResult>>(() => {
515 - const configured = selectedEventSource.value?.displayed_columns
516 - if (configured && configured.length > 0) {
517 - return configured.map(buildColumnFromConfig)
518 - }
519 - return defaultColumns
520 -})
521 -
522 -// -- Configure columns modal --
523 -const showColumnConfig = ref(false)
524 -
198 function onColumnsSaved(saved: DisplayColumn[] | null) {
526 - // Patch the local list so the table re-renders without a network round-trip.
527 - if (selectedEventSource.value) {
528 - selectedEventSource.value.displayed_columns = saved
529 - }
530 -}
531 -
532 -// -- Event detail --
533 -const showDetailDrawer = ref(false)
534 -const selectedEvent = ref<EventSearchResult | null>(null)
535 -
536 -function rowProps(row: EventSearchResult) {
537 - return {
538 - style: "cursor: pointer",
539 - onClick: () => {
540 - selectedEvent.value = row
541 - showDetailDrawer.value = true
542 - }
199 + const source = selectedEventSource.value
200 + if (source) {
201 + source.displayed_columns = saved
202 }
203 }
204
205 function addFilterFromDetail(field: string, value: string) {
206 const filterExpr = `${field}:"${value}"`
548 - if (query.value) {
549 - query.value += ` AND ${filterExpr}`
550 - } else {
551 - query.value = filterExpr
207 + query.value = query.value ? `${query.value} AND ${filterExpr}` : filterExpr
208 + if (searchFormParams.value) {
209 + searchFormParams.value = { ...searchFormParams.value, query: query.value }
210 }
211 showDetailDrawer.value = false
212 searchEvents()
@@ -556,84 +214,11 @@ function addFilterFromDetail(field: string, value: string) {
214
215 function excludeFilterFromDetail(field: string, value: string) {
216 const filterExpr = `NOT ${field}:"${value}"`
559 - if (query.value) {
560 - query.value += ` AND ${filterExpr}`
561 - } else {
562 - query.value = filterExpr
217 + query.value = query.value ? `${query.value} AND ${filterExpr}` : filterExpr
218 + if (searchFormParams.value) {
219 + searchFormParams.value = { ...searchFormParams.value, query: query.value }
220 }
221 showDetailDrawer.value = false
222 searchEvents()
223 }
567 -
568 -// -- Lifecycle --
569 -function applyRouteParams() {
570 - const qp = route.query
571 - if (qp.customer_code) {
572 - const code = String(qp.customer_code)
573 - selectedCustomerCode.value = code
574 -
575 - if (qp.query) {
576 - query.value = String(qp.query)
577 - }
578 -
579 - // Load event sources then auto-select source_name if provided
580 - loadingEventSources.value = true
581 - Api.siem
582 - .getEventSources(code)
583 - .then(res => {
584 - if (res.data.success) {
585 - eventSourcesList.value = res.data?.event_sources || []
586 -
587 - const targetSource = qp.source_name ? String(qp.source_name) : null
588 - if (targetSource) {
589 - // Try exact match first
590 - const match = eventSourcesList.value.find(s => s.name === targetSource && s.enabled)
591 - if (match) {
592 - selectedSourceName.value = match.name
593 - }
594 - } else {
595 - // Default to first EDR source if no source_name specified
596 - const edr = eventSourcesList.value.find(s => s.event_type === "EDR" && s.enabled)
597 - if (edr) {
598 - selectedSourceName.value = edr.name
599 - }
600 - }
601 -
602 - if (selectedSourceName.value) {
603 - loadFieldMappings()
604 - nextTick(() => searchEvents())
605 - }
606 - }
607 - })
608 - .finally(() => {
609 - loadingEventSources.value = false
610 - })
611 - }
612 -}
613 -
614 -onBeforeMount(() => {
615 - getCustomers().then(() => {
616 - applyRouteParams()
617 - })
618 -})
224 </script>
620 -
621 -<style scoped>
622 -.suggestions-dropdown {
623 - border-color: var(--border-color);
624 -}
625 -
626 -.level-error {
627 - color: var(--error-color, #e88080);
628 - font-weight: 600;
629 -}
630 -
631 -.level-warning {
632 - color: var(--warning-color, #f0a020);
633 - font-weight: 600;
634 -}
635 -
636 -.level-info {
637 - color: var(--info-color, #70c0e8);
638 -}
639 -</style>
frontend/src/components/events/EventSearchFilters.vue new
+413
@@ -0,0 +1,413 @@
1 +<template>
2 + <div class="flex flex-col gap-4">
3 + <n-alert v-if="showNoSourcesWarning" title="No Event Sources Configured" type="warning" closable>
4 + An Event Source needs to be defined for this customer before events can be searched. Go to the customer's
5 + <strong>Event Sources</strong>
6 + tab to configure one.
7 + </n-alert>
8 +
9 + <div class="@container flex w-full flex-col gap-3">
10 + <div class="flex flex-col gap-2">
11 + <div class="flex w-full flex-wrap items-center justify-between gap-2">
12 + <div class="flex items-center gap-2">
13 + Lucene Query
14 + <p class="text-secondary text-xs">type # to autocomplete</p>
15 + </div>
16 + <div class="flex items-center gap-2">
17 + <n-select
18 + v-model:value="selectedCustomerCode"
19 + placeholder="Select Customer"
20 + filterable
21 + size="tiny"
22 + :options="customersOptions"
23 + :loading="loadingCustomers"
24 + :consistent-menu-width="false"
25 + @update:value="onCustomerChange"
26 + />
27 +
28 + <n-select
29 + v-model:value="selectedSourceName"
30 + placeholder="Select Source"
31 + filterable
32 + size="tiny"
33 + :options="eventSourceOptions"
34 + :disabled="!selectedCustomerCode"
35 + :loading="loadingEventSources"
36 + :consistent-menu-width="false"
37 + />
38 + </div>
39 + </div>
40 +
41 + <n-mention
42 + v-model:value="query"
43 + type="textarea"
44 + separator=" "
45 + :autosize="{ minRows: 3, maxRows: 8 }"
46 + placeholder="e.g. agent_name:web-server AND rule_level:>=10"
47 + :options="suggestionOptions"
48 + :prefix="['#']"
49 + :loading="loadingFieldMappings"
50 + :render-label
51 + @select="onMentionSelect"
52 + >
53 + <template #empty>
54 + <n-spin :show="loadingFieldMappings">
55 + <div class="text-secondary text-xs">No field mappings found</div>
56 + </n-spin>
57 + </template>
58 + </n-mention>
59 + </div>
60 + <div class="flex flex-wrap justify-between gap-3">
61 + <div class="text-secondary text-xs">
62 + {{
63 + !selectedCustomerCode
64 + ? "Select a customer to search"
65 + : !selectedSourceName
66 + ? "Select a source to search"
67 + : ""
68 + }}
69 + </div>
70 +
71 + <div class="flex flex-wrap items-center justify-end gap-3">
72 + <n-input-group class="flex flex-1 items-center justify-end">
73 + <n-input-number
74 + v-if="timerangeMode === 'relative'"
75 + v-model:value="filterTimeRange.time"
76 + :show-button="false"
77 + :min="1"
78 + size="small"
79 + placeholder="Time"
80 + class="max-w-15! min-w-10! text-center"
81 + />
82 + <n-select
83 + v-if="timerangeMode === 'relative'"
84 + v-model:value="filterTimeRange.unit"
85 + :options="unitOptions"
86 + class="max-w-25!"
87 + placeholder="Time unit"
88 + :consistent-menu-width="false"
89 + size="small"
90 + />
91 + <n-date-picker
92 + v-if="timerangeMode === 'absolute'"
93 + v-model:value="daterange"
94 + type="datetimerange"
95 + class="min-w-70"
96 + clearable
97 + size="small"
98 + />
99 + <n-button
100 + v-if="timerangeMode === 'relative'"
101 + secondary
102 + size="small"
103 + @click="timerangeMode = 'absolute'"
104 + >
105 + <template #icon>
106 + <Icon name="carbon:calendar" />
107 + </template>
108 + </n-button>
109 + <n-button
110 + v-if="timerangeMode === 'absolute'"
111 + secondary
112 + size="small"
113 + @click="timerangeMode = 'relative'"
114 + >
115 + <template #icon>
116 + <Icon name="carbon:reset" />
117 + </template>
118 + </n-button>
119 + </n-input-group>
120 +
121 + <n-select v-model:value="pageSize" :options="pageSizeOptions" size="small" class="w-33!" />
122 +
123 + <n-button
124 + secondary
125 + size="small"
126 + type="primary"
127 + :loading="loadingEvents"
128 + :disabled="!selectedCustomerCode || !selectedSourceName"
129 + @click="searchEvents"
130 + >
131 + <template #icon>
132 + <Icon name="carbon:search" />
133 + </template>
134 + Search
135 + </n-button>
136 + </div>
137 + </div>
138 + </div>
139 + </div>
140 +</template>
141 +
142 +<script setup lang="ts">
143 +import type { MentionOption } from "naive-ui"
144 +import type { VNodeChild } from "vue"
145 +import type { Customer } from "@/types/customers.d"
146 +import type { FieldMapping } from "@/types/events.d"
147 +import type { EventSource } from "@/types/eventSources.d"
148 +import { NAlert, NButton, NDatePicker, NInputGroup, NInputNumber, NMention, NSelect, NSpin, useMessage } from "naive-ui"
149 +import { computed, h, onBeforeMount, ref, watch } from "vue"
150 +import { useRoute } from "vue-router"
151 +import Api from "@/api"
152 +import Icon from "@/components/common/Icon.vue"
153 +import dayjs from "@/utils/dayjs"
154 +
155 +export type EventSearchQueryTimerange = `${number}${"h" | "d" | "w"}`
156 +
157 +export interface EventSearchFiltersParams {
158 + customerCode: string
159 + sourceName: string
160 + query: string
161 + timerange: EventSearchQueryTimerange
162 + timeFrom: number | null
163 + timeTo: number | null
164 + timeMode: "relative" | "absolute"
165 + pageSize: number
166 + fieldMappings: FieldMapping[]
167 +}
168 +
169 +export interface EventSearchFiltersLoad {
170 + customerCode: string
171 + eventSources: EventSource[]
172 +}
173 +
174 +defineProps<{
175 + loadingEvents: boolean
176 +}>()
177 +
178 +const emit = defineEmits<{
179 + search: [params: EventSearchFiltersParams]
180 + loaded: [load: EventSearchFiltersLoad]
181 + "field-mappings": [mappings: FieldMapping[]]
182 + "field-mappings-loading": [loading: boolean]
183 +}>()
184 +
185 +const query = defineModel<string>("query", { default: "" })
186 +
187 +const TRAILING_WHITESPACE_RE = /\s$/
188 +
189 +const route = useRoute()
190 +const message = useMessage()
191 +
192 +const filterTimeRange = ref<{ unit: "h" | "d" | "w"; time: number }>({
193 + unit: "h",
194 + time: 24
195 +})
196 +const unitOptions: { label: string; value: "h" | "d" | "w" }[] = [
197 + { label: "Hours", value: "h" },
198 + { label: "Days", value: "d" },
199 + { label: "Weeks", value: "w" }
200 +]
201 +const timerange = computed<EventSearchQueryTimerange>(
202 + () => `${filterTimeRange.value.time}${filterTimeRange.value.unit}`
203 +)
204 +const daterange = ref<[number, number]>([dayjs().subtract(1, "day").valueOf(), Date.now()])
205 +const timerangeMode = ref<"relative" | "absolute">("relative")
206 +
207 +const pageSizeOptions = [
208 + { label: "25 per page", value: 25 },
209 + { label: "50 per page", value: 50 },
210 + { label: "100 per page", value: 100 },
211 + { label: "250 per page", value: 250 }
212 +]
213 +
214 +const loadingCustomers = ref(false)
215 +const customersList = ref<Customer[]>([])
216 +const loadingEventSources = ref(false)
217 +const eventSources = ref<EventSource[]>([])
218 +const selectedCustomerCode = ref<string | null>(null)
219 +const selectedSourceName = ref<string | null>(null)
220 +const pageSize = ref(pageSizeOptions[1].value)
221 +const loadingFieldMappings = ref(false)
222 +const fieldMappings = ref<FieldMapping[]>([])
223 +
224 +const customersOptions = computed(() =>
225 + customersList.value.map(o => ({ label: `#${o.customer_code} - ${o.customer_name}`, value: o.customer_code }))
226 +)
227 +
228 +const eventSourceOptions = computed(() =>
229 + eventSources.value.filter(s => s.enabled).map(s => ({ label: `${s.name} (${s.event_type})`, value: s.name }))
230 +)
231 +
232 +const showNoSourcesWarning = computed(
233 + () => selectedCustomerCode.value && !loadingEventSources.value && eventSources.value.length === 0
234 +)
235 +
236 +const suggestionOptions = computed(() =>
237 + fieldMappings.value.map(f => ({ label: f.field, type: f.type, value: f.field }))
238 +)
239 +
240 +function renderLabel(option: MentionOption): VNodeChild {
241 + const label = String(option.label ?? "")
242 + const type = String(option.type ?? "")
243 +
244 + return h("div", { class: "flex w-full items-center justify-between gap-2" }, [
245 + h("div", { class: "text-sm font-medium font-mono" }, label),
246 + h("div", { class: "text-secondary text-xs" }, type)
247 + ])
248 +}
249 +
250 +function getCustomers() {
251 + loadingCustomers.value = true
252 + return Api.customers
253 + .getCustomers()
254 + .then(res => {
255 + if (res.data.success) {
256 + customersList.value = res.data?.customers || []
257 + } else {
258 + message.warning(res.data?.message || "An error occurred. Please try again later.")
259 + }
260 + })
261 + .catch(err => {
262 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
263 + })
264 + .finally(() => {
265 + loadingCustomers.value = false
266 + })
267 +}
268 +
269 +function getEventSources(customerCode: string) {
270 + loadingEventSources.value = true
271 + eventSources.value = []
272 + selectedSourceName.value = null
273 + fieldMappings.value = []
274 + emit("field-mappings-loading", false)
275 + emit("field-mappings", [])
276 +
277 + return Api.siem
278 + .getEventSources(customerCode)
279 + .then(res => {
280 + if (res.data.success) {
281 + eventSources.value = res.data?.event_sources || []
282 + } else {
283 + message.warning(res.data?.message || "An error occurred. Please try again later.")
284 + }
285 + })
286 + .catch(err => {
287 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
288 + })
289 + .finally(() => {
290 + loadingEventSources.value = false
291 + emit("loaded", { customerCode, eventSources: eventSources.value })
292 + })
293 +}
294 +
295 +async function loadFieldMappings() {
296 + if (!selectedCustomerCode.value || !selectedSourceName.value) return
297 +
298 + loadingFieldMappings.value = true
299 + fieldMappings.value = []
300 + emit("field-mappings-loading", true)
301 + emit("field-mappings", [])
302 +
303 + try {
304 + const res = await Api.siem.getFieldMappings(selectedCustomerCode.value, selectedSourceName.value)
305 + if (res.data.success) {
306 + fieldMappings.value = res.data.fields || []
307 + }
308 + } catch {
309 + fieldMappings.value = []
310 + } finally {
311 + loadingFieldMappings.value = false
312 + emit("field-mappings-loading", false)
313 + emit("field-mappings", fieldMappings.value)
314 + }
315 +}
316 +
317 +function onCustomerChange(code: string) {
318 + if (code) {
319 + getEventSources(code)
320 + }
321 +}
322 +
323 +function searchEvents() {
324 + if (!selectedCustomerCode.value || !selectedSourceName.value) return
325 +
326 + emit("search", {
327 + customerCode: selectedCustomerCode.value,
328 + sourceName: selectedSourceName.value,
329 + query: query.value || "",
330 + timerange: timerange.value,
331 + timeFrom: timerangeMode.value === "absolute" ? daterange.value[0] : null,
332 + timeTo: timerangeMode.value === "absolute" ? daterange.value[1] : null,
333 + timeMode: timerangeMode.value,
334 + pageSize: pageSize.value,
335 + fieldMappings: fieldMappings.value
336 + })
337 +}
338 +
339 +function onMentionSelect(option: MentionOption, prefix: string) {
340 + const currentQuery = query.value || ""
341 + const target = `${prefix}${option.value}`
342 + const lastIndex = currentQuery.lastIndexOf(target)
343 +
344 + if (lastIndex === -1) {
345 + const lastPrefixIndex = currentQuery.lastIndexOf(prefix)
346 + if (lastPrefixIndex !== -1) {
347 + const before = currentQuery.slice(0, lastPrefixIndex)
348 + const after = currentQuery.slice(lastPrefixIndex + prefix.length)
349 + const needsSpace = before.length > 0 && !TRAILING_WHITESPACE_RE.test(before)
350 + const replacement = `${needsSpace ? " " : ""}${option.value}:`
351 + query.value = `${before}${replacement}${after}`
352 + return
353 + }
354 +
355 + const needsSpace = currentQuery.length > 0 && !TRAILING_WHITESPACE_RE.test(currentQuery)
356 + query.value = `${currentQuery}${needsSpace ? " " : ""}${option.value}:`
357 + return
358 + }
359 +
360 + const before = currentQuery.slice(0, lastIndex)
361 + const after = currentQuery.slice(lastIndex + target.length)
362 + const needsSpace = before.length > 0 && !TRAILING_WHITESPACE_RE.test(before)
363 + const replacement = `${needsSpace ? " " : ""}${option.value}:`
364 +
365 + query.value = `${before}${replacement}${after}`
366 +}
367 +
368 +async function applyRouteParams() {
369 + const qp = route.query
370 + if (!qp.customer_code) return
371 +
372 + const code = String(qp.customer_code)
373 + selectedCustomerCode.value = code
374 +
375 + if (qp.query) {
376 + query.value = String(qp.query)
377 + }
378 +
379 + await getEventSources(code)
380 +
381 + const targetSource = qp.source_name ? String(qp.source_name) : null
382 + if (targetSource) {
383 + const match = eventSources.value.find(s => s.name === targetSource && s.enabled)
384 + if (match) {
385 + selectedSourceName.value = match.name
386 + }
387 + } else {
388 + const edr = eventSources.value.find(s => s.event_type === "EDR" && s.enabled)
389 + if (edr) {
390 + selectedSourceName.value = edr.name
391 + }
392 + }
393 +
394 + if (selectedSourceName.value) {
395 + await loadFieldMappings()
396 + searchEvents()
397 + }
398 +}
399 +
400 +watch(
401 + selectedSourceName,
402 + val => {
403 + if (val) {
404 + loadFieldMappings()
405 + }
406 + },
407 + { immediate: true }
408 +)
409 +
410 +onBeforeMount(() => {
411 + getCustomers().then(() => applyRouteParams())
412 +})
413 +</script>
frontend/src/components/events/EventSearchResults.vue new
+207
@@ -0,0 +1,207 @@
1 +<template>
2 + <div class="flex flex-col gap-1">
3 + <div class="flex items-end justify-between gap-3">
4 + <p class="py-1 text-sm">
5 + Showing
6 + <span class="font-semibold">{{ events.length }}</span>
7 + of
8 + <span class="font-semibold">{{ totalEvents }}</span>
9 + events
10 + </p>
11 +
12 + <div class="flex flex-wrap items-center gap-3">
13 + <n-tooltip class="px-2! py-1! text-xs!">
14 + <template #trigger>
15 + <Icon :name="InfoIcon" :size="15" class="cursor-help" />
16 + </template>
17 + Click table row to view event details
18 + </n-tooltip>
19 + <n-button
20 + text
21 + :disabled="!eventSource"
22 + title="Configure which columns to display for this event source"
23 + @click="emit('configure-columns')"
24 + >
25 + <template #icon>
26 + <Icon :name="SettingsIcon" :size="15" />
27 + </template>
28 + Columns
29 + </n-button>
30 + </div>
31 + </div>
32 +
33 + <n-data-table
34 + :columns
35 + :loading="loadingEvents"
36 + :data="events"
37 + size="small"
38 + :scroll-x
39 + :row-key="(row: EventSearchResult) => row._id || JSON.stringify(row)"
40 + :row-props
41 + class="[&_.n-data-table-th\_\_title]:whitespace-nowrap"
42 + >
43 + <template #empty>
44 + <n-empty description="No events found">
45 + <template #extra>Try adjusting your query or expanding the time range</template>
46 + </n-empty>
47 + </template>
48 + </n-data-table>
49 +
50 + <div v-if="scrollId && events.length < totalEvents" class="mt-3 flex justify-center">
51 + <n-button :loading="loadingMore" @click="emit('load-more')">Load More</n-button>
52 + </div>
53 + </div>
54 +</template>
55 +
56 +<script setup lang="ts">
57 +import type { DataTableColumns } from "naive-ui"
58 +import type { EventSearchResult } from "@/types/events.d"
59 +import type { DisplayColumn, EventSource } from "@/types/eventSources.d"
60 +import { NButton, NDataTable, NEmpty, NTooltip } from "naive-ui"
61 +import { computed, h } from "vue"
62 +import Icon from "@/components/common/Icon.vue"
63 +
64 +const props = defineProps<{
65 + events: EventSearchResult[]
66 + totalEvents: number
67 + loadingEvents: boolean
68 + loadingMore: boolean
69 + hasSearched: boolean
70 + scrollId: string | null
71 + eventSource: EventSource | null
72 +}>()
73 +
74 +const emit = defineEmits<{
75 + "load-more": []
76 + "configure-columns": []
77 + "row-select": [event: EventSearchResult]
78 +}>()
79 +
80 +const MIN_COLUMN_WIDTH = 120
81 +const SettingsIcon = "carbon:settings"
82 +const InfoIcon = "carbon:information"
83 +
84 +function resolveColumnWidth(width?: number | null): number {
85 + if (width == null || width < MIN_COLUMN_WIDTH) return MIN_COLUMN_WIDTH
86 + return width
87 +}
88 +
89 +function normalizeColumns(cols: DataTableColumns<EventSearchResult>): DataTableColumns<EventSearchResult> {
90 + return cols.map(col => ({
91 + ...col,
92 + width: resolveColumnWidth(typeof col.width === "number" ? col.width : undefined)
93 + }))
94 +}
95 +
96 +const defaultColumns: DataTableColumns<EventSearchResult> = [
97 + {
98 + title: "Timestamp",
99 + key: "timestamp",
100 + width: 180,
101 + sorter: (a, b) => {
102 + const timeA = a.timestamp || a["@timestamp"] || ""
103 + const timeB = b.timestamp || b["@timestamp"] || ""
104 + return new Date(timeA).getTime() - new Date(timeB).getTime()
105 + },
106 + render(row) {
107 + const ts = row.timestamp || row["@timestamp"]
108 + if (!ts) return "-"
109 + return new Date(ts).toLocaleString()
110 + }
111 + },
112 + {
113 + title: "Source",
114 + key: "agent_name",
115 + width: 140,
116 + ellipsis: { tooltip: true },
117 + render(row) {
118 + return row.agent_name || row.source || "-"
119 + }
120 + },
121 + {
122 + title: "Rule",
123 + key: "rule_description",
124 + width: 200,
125 + ellipsis: { tooltip: true },
126 + render(row) {
127 + return row.rule_description || row.rule_id || "-"
128 + }
129 + },
130 + {
131 + title: "Level",
132 + key: "rule_level",
133 + width: 80,
134 + sorter: (a, b) => (Number(a.rule_level) || 0) - (Number(b.rule_level) || 0),
135 + render(row) {
136 + if (row.rule_level === undefined || row.rule_level === null) return "-"
137 + const level = Number(row.rule_level)
138 + let type: "default" | "warning" | "error" | "success" | "info" = "default"
139 + if (level >= 12) type = "error"
140 + else if (level >= 8) type = "warning"
141 + else if (level >= 4) type = "info"
142 + return h("span", { class: `level-${type}` }, String(row.rule_level))
143 + }
144 + },
145 + {
146 + title: "Summary",
147 + key: "full_log",
148 + width: 320,
149 + ellipsis: { tooltip: true },
150 + render(row) {
151 + return row.full_log || row.data || row.message || "-"
152 + }
153 + }
154 +]
155 +
156 +function getNestedValue(obj: EventSearchResult, path: string): unknown {
157 + return path.split(".").reduce<unknown>((acc, segment) => {
158 + if (acc && typeof acc === "object") {
159 + return (acc as Record<string, unknown>)[segment]
160 + }
161 + return undefined
162 + }, obj)
163 +}
164 +
165 +function formatCellValue(val: unknown): string {
166 + if (val === undefined || val === null || val === "") return "-"
167 + if (Array.isArray(val)) return val.map(v => (v === null || v === undefined ? "" : String(v))).join(", ")
168 + if (typeof val === "object") return JSON.stringify(val)
169 + return String(val)
170 +}
171 +
172 +function buildColumnFromConfig(col: DisplayColumn): DataTableColumns<EventSearchResult>[number] {
173 + return {
174 + title: col.label || col.key,
175 + key: col.key,
176 + width: resolveColumnWidth(col.width),
177 + ellipsis: { tooltip: true },
178 + render(row: EventSearchResult) {
179 + return formatCellValue(getNestedValue(row, col.key))
180 + }
181 + }
182 +}
183 +
184 +const columns = computed<DataTableColumns<EventSearchResult>>(() => {
185 + const configured = props.eventSource?.displayed_columns
186 + if (configured && configured.length > 0) {
187 + return normalizeColumns(configured.map(buildColumnFromConfig))
188 + }
189 + return normalizeColumns(defaultColumns)
190 +})
191 +
192 +const scrollX = computed(() =>
193 + columns.value.reduce(
194 + (sum, col) => sum + resolveColumnWidth(typeof col.width === "number" ? col.width : undefined),
195 + 0
196 + )
197 +)
198 +
199 +function rowProps(row: EventSearchResult) {
200 + return {
201 + style: "cursor: pointer",
202 + onClick: () => {
203 + emit("row-select", row)
204 + }
205 + }
206 +}
207 +</script>
frontend/src/utils/highlighter.ts
+2 -1
@@ -34,7 +34,8 @@ export async function getHighlighter() {
34 import("shiki/langs/sql.mjs"),
35 import("shiki/langs/lua.mjs"),
36 import("shiki/langs/vb.mjs"),
37 - import("shiki/langs/php.mjs")
37 + import("shiki/langs/php.mjs"),
38 + import("shiki/langs/markdown.mjs")
39 ],
40 engine: createOnigurumaEngine(() => import("shiki/wasm"))
41 }).then(instance => {
frontend/src/views/externalServices/ShuffleAppAuth.vue
+1 -5
@@ -24,11 +24,7 @@
24 />
25 </n-spin>
26
27 - <n-empty
28 - v-else
29 - description="Select an organization to manage app authentication"
30 - class="grow justify-center"
31 - />
27 + <n-empty v-else description="Select an organization to manage app authentication" class="grow justify-center" />
28 </div>
29 </template>
30