From c5922da5be300e5efe5c74130816942f19976de1 Mon Sep 17 00:00:00 2001 From: Mathieu Ledru Date: Sun, 21 Sep 2025 22:27:30 +0200 Subject: [PATCH 1/5] :hammer: Temporary comment delete or duplicate --- assets/shop/program.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/shop/program.jsx b/assets/shop/program.jsx index 16a1a264..5300e7c0 100644 --- a/assets/shop/program.jsx +++ b/assets/shop/program.jsx @@ -503,7 +503,7 @@ class Program extends React.Component {

Infos

-
+ {/*
@@ -514,7 +514,7 @@ class Program extends React.Component {
-
+
*/}
From 2857525a7fa97beea650903ebf84f45a16f8dbf5 Mon Sep 17 00:00:00 2001 From: Mathieu Ledru Date: Fri, 26 Sep 2025 22:14:15 +0200 Subject: [PATCH 2/5] :hammer: Comment out delete and duplicate route methods in ProgramController --- src/Controller/Api/ProgramController.php | 4 ++-- src/Controller/Shop/ProgramController.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Controller/Api/ProgramController.php b/src/Controller/Api/ProgramController.php index 67f884f3..e614ab17 100644 --- a/src/Controller/Api/ProgramController.php +++ b/src/Controller/Api/ProgramController.php @@ -253,7 +253,7 @@ public function setFlows(Request $request, $uid): JsonResponse return new JsonResponse(false, Response::HTTP_BAD_REQUEST); } - #[Route(path: '/delete/{id}', name: 'api_program_delete', methods: ['DELETE'])] + /*#[Route(path: '/delete/{id}', name: 'api_program_delete', methods: ['DELETE'])] public function delete($id): JsonResponse { $user = $this->getUser(); @@ -270,7 +270,7 @@ public function delete($id): JsonResponse $this->programService->remove($entity); return new JsonResponse($this->programService->getJsonProgram($entity)); - } + }*/ private function manage(Request $request, Program $entity): JsonResponse { diff --git a/src/Controller/Shop/ProgramController.php b/src/Controller/Shop/ProgramController.php index 3e781e5e..40621d3a 100644 --- a/src/Controller/Shop/ProgramController.php +++ b/src/Controller/Shop/ProgramController.php @@ -21,7 +21,7 @@ public function __construct( private readonly EntityManagerInterface $entityManager, ) {} - #[Route('/program/duplicate/{uid}', name: 'program_duplicate', methods: ['GET'])] + /*#[Route('/program/duplicate/{uid}', name: 'program_duplicate', methods: ['GET'])] public function programDuplicate(string $uid): Response { $user = $this->getUser(); @@ -57,5 +57,5 @@ public function programRemove(string $uid): Response $this->entityManager->flush(); return $this->redirectToRoute('app_shop_feed'); - } + }*/ } From 648d451e7f3edb8217d5133f7c89b68ce115527a Mon Sep 17 00:00:00 2001 From: Mathieu Ledru Date: Sat, 4 Oct 2025 21:38:08 +0200 Subject: [PATCH 3/5] :sparkles: Add new flow components for enhanced functionality and integrate HTML flow --- .../index.jsx => flow/assets-flow.jsx} | 5 +- .../index.jsx => flow/canvas-flow.jsx} | 5 +- .../index.jsx => flow/function-flow.jsx} | 5 +- assets/shop/components/flow/html-flow.jsx | 120 +++ .../index.jsx => flow/object-flow.jsx} | 5 +- .../index.jsx => flow/prompt-flow.jsx} | 4 +- .../index.jsx => flow/text-flow.jsx} | 5 +- assets/shop/models/flows.js | 18 +- assets/shop/models/runner.js | 2 +- package-lock.json | 776 +++++++++--------- package.json | 1 + 11 files changed, 555 insertions(+), 391 deletions(-) rename assets/shop/components/{flow-assets/index.jsx => flow/assets-flow.jsx} (97%) rename assets/shop/components/{flow-canvas/index.jsx => flow/canvas-flow.jsx} (95%) rename assets/shop/components/{flow-function/index.jsx => flow/function-flow.jsx} (90%) create mode 100644 assets/shop/components/flow/html-flow.jsx rename assets/shop/components/{flow-object/index.jsx => flow/object-flow.jsx} (97%) rename assets/shop/components/{flow-prompt/index.jsx => flow/prompt-flow.jsx} (98%) rename assets/shop/components/{flow-text/index.jsx => flow/text-flow.jsx} (93%) diff --git a/assets/shop/components/flow-assets/index.jsx b/assets/shop/components/flow/assets-flow.jsx similarity index 97% rename from assets/shop/components/flow-assets/index.jsx rename to assets/shop/components/flow/assets-flow.jsx index 9d172190..95fbc098 100644 --- a/assets/shop/components/flow-assets/index.jsx +++ b/assets/shop/components/flow/assets-flow.jsx @@ -1,11 +1,10 @@ import React, { useImperativeHandle } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' +import { flow } from './flow.jsx' import LZString from 'lz-string' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faDownload, faTimes } from '@fortawesome/free-solid-svg-icons' -import { ClientType } from '../../models/client-type'; const AssetsFlow = flow((props, ref) => { const { onPop, onUpdate, onPlay, onStop, isPlaying, data, clients } = props diff --git a/assets/shop/components/flow-canvas/index.jsx b/assets/shop/components/flow/canvas-flow.jsx similarity index 95% rename from assets/shop/components/flow-canvas/index.jsx rename to assets/shop/components/flow/canvas-flow.jsx index 2e9c1899..27de88ed 100644 --- a/assets/shop/components/flow-canvas/index.jsx +++ b/assets/shop/components/flow/canvas-flow.jsx @@ -1,9 +1,8 @@ import React, { useImperativeHandle } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' +import { flow } from './flow.jsx' import { useRef } from 'react' -import { ClientType } from '../../models/client-type'; // Canvas flow data shape: // { diff --git a/assets/shop/components/flow-function/index.jsx b/assets/shop/components/flow/function-flow.jsx similarity index 90% rename from assets/shop/components/flow-function/index.jsx rename to assets/shop/components/flow/function-flow.jsx index e1c9164c..15ec09c8 100644 --- a/assets/shop/components/flow-function/index.jsx +++ b/assets/shop/components/flow/function-flow.jsx @@ -1,8 +1,7 @@ import React, { useImperativeHandle } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' -import { ClientType } from '../../models/client-type'; +import { flow } from './flow.jsx' /** * @typedef {Object} FunctionFlowData diff --git a/assets/shop/components/flow/html-flow.jsx b/assets/shop/components/flow/html-flow.jsx new file mode 100644 index 00000000..95e34733 --- /dev/null +++ b/assets/shop/components/flow/html-flow.jsx @@ -0,0 +1,120 @@ +import React, { useImperativeHandle, useMemo } from 'react' +import FlowHeader from './header.jsx' +import FormInput, { FormInputType } from '../form-input.jsx' +import { flow } from './flow.jsx' + +/** + * HtmlFlow — safely render HTML stored in a variable + * + * Single input: `variable` (name of runner context variable holding HTML). + * The variable's value is sanitized using custom DOM filtering and rendered directly + * in the preview (not inside an iframe). + */ + +const HtmlFlow = flow((props, ref) => { + const { onPop, onUpdate, onPlay, onStop, isPlaying, data, clients } = props + + useImperativeHandle(ref, () => ({ + onSerialize: () => { + return JSON.stringify([data?.variable, data?.html]) + }, + onDeserialize: (data) => { + const [variable, html] = data ? JSON.parse(data) : [undefined, undefined] + return { variable, html } + }, + onCompile: () => { + if (!data || !data.variable) { + return '' + } + + let html = data.html || '' + html = JSON.stringify(html) + + return data.variable + ' = ' + html + }, + onExecute: async (runner) => { + if (data && data.variable) { + let context = runner.getContext() + if (context[data.variable]) { + onUpdate({ + ...data, + html: context[data.variable] + }) + } else { + return runner.run() + } + } + } + }), [data]) + + const onChangeVariable = (variable) => onUpdate({ ...data, variable }) + + const sanitizedHtml = (() => { + const dirty = String(data?.html || '') + if (!dirty) return '' + + // Custom sanitization for iframes - more permissive than DOMPurify + const tempDiv = document.createElement('div') + tempDiv.innerHTML = dirty + + // Remove potentially dangerous elements + const dangerousElements = tempDiv.querySelectorAll('script, object, embed, form, input, button') + dangerousElements.forEach(el => el.remove()) + + // Clean up iframe attributes - only keep safe ones + const iframes = tempDiv.querySelectorAll('iframe') + iframes.forEach(iframe => { + // Remove potentially dangerous attributes + const allowedAttrs = ['src', 'width', 'height', 'frameborder', 'allowfullscreen', 'allow', 'sandbox'] + const attrsToRemove = [] + + for (let attr of iframe.attributes) { + if (!allowedAttrs.includes(attr.name)) { + attrsToRemove.push(attr.name) + } + } + + attrsToRemove.forEach(attr => iframe.removeAttribute(attr)) + + // Ensure src starts with https: or is a relative URL + const src = iframe.getAttribute('src') + if (src && !src.startsWith('https:') && !src.startsWith('/') && !src.startsWith('./')) { + iframe.removeAttribute('src') + } + }) + + return tempDiv.innerHTML + })() + + return ( + <> + + + + + +
+ +
+
+
+ + + ) +}) + +export default HtmlFlow diff --git a/assets/shop/components/flow-object/index.jsx b/assets/shop/components/flow/object-flow.jsx similarity index 97% rename from assets/shop/components/flow-object/index.jsx rename to assets/shop/components/flow/object-flow.jsx index 9fdcb791..36a1f4d1 100644 --- a/assets/shop/components/flow-object/index.jsx +++ b/assets/shop/components/flow/object-flow.jsx @@ -1,11 +1,10 @@ import React, { useImperativeHandle } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' +import { flow } from './flow.jsx' import PropertyAccessor from 'property-accessor' import { faTimes } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { ClientType } from '../../models/client-type'; const ObjectFlow = flow((props, ref) => { const { onPop, onUpdate, onPlay, onStop, isPlaying, data, clients } = props diff --git a/assets/shop/components/flow-prompt/index.jsx b/assets/shop/components/flow/prompt-flow.jsx similarity index 98% rename from assets/shop/components/flow-prompt/index.jsx rename to assets/shop/components/flow/prompt-flow.jsx index c07dcf7b..5b708cb2 100644 --- a/assets/shop/components/flow-prompt/index.jsx +++ b/assets/shop/components/flow/prompt-flow.jsx @@ -1,7 +1,7 @@ import React, { useImperativeHandle, useRef, useState } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' +import { flow } from './flow.jsx' import { useStateRef } from '../../hooks/use-state-ref' import { ClientType } from '../../models/client-type'; diff --git a/assets/shop/components/flow-text/index.jsx b/assets/shop/components/flow/text-flow.jsx similarity index 93% rename from assets/shop/components/flow-text/index.jsx rename to assets/shop/components/flow/text-flow.jsx index 63afcea3..d2a40a73 100644 --- a/assets/shop/components/flow-text/index.jsx +++ b/assets/shop/components/flow/text-flow.jsx @@ -1,8 +1,7 @@ import React, { useImperativeHandle } from 'react' -import FlowHeader from '../flow/header.jsx' +import FlowHeader from './header.jsx' import FormInput, { FormInputType } from '../form-input.jsx' -import { flow } from '../flow/flow.jsx' -import { ClientType } from '../../models/client-type'; +import { flow } from './flow.jsx' const TextFlow = flow((props, ref) => { const { onPop, onUpdate, onPlay, onStop, isPlaying, data, clients } = props diff --git a/assets/shop/models/flows.js b/assets/shop/models/flows.js index ab4ee773..fdd34d3c 100644 --- a/assets/shop/models/flows.js +++ b/assets/shop/models/flows.js @@ -1,11 +1,12 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; -import FunctionFlow from './../components/flow-function/index.jsx' -import PromptFlow from './../components/flow-prompt/index.jsx' -import AssetsFlow from './../components/flow-assets/index.jsx' -import TextFlow from './../components/flow-text/index.jsx' -import CanvasFlow from './../components/flow-canvas/index.jsx' -import ObjectFlow from './../components/flow-object/index.jsx' +import FunctionFlow from './../components/flow/function-flow.jsx' +import PromptFlow from './../components/flow/prompt-flow.jsx' +import AssetsFlow from './../components/flow/assets-flow.jsx' +import TextFlow from './../components/flow/text-flow.jsx' +import CanvasFlow from './../components/flow/canvas-flow.jsx' +import ObjectFlow from './../components/flow/object-flow.jsx' +import HtmlFlow from './../components/flow/html-flow.jsx' import { ClientType } from './client-type'; @@ -16,6 +17,7 @@ export const flows = { '@uniflow-io/uniflow-flow-assets': AssetsFlow, '@uniflow-io/uniflow-flow-canvas': CanvasFlow, '@uniflow-io/uniflow-flow-object': ObjectFlow, + '@uniflow-io/uniflow-flow-html': HtmlFlow, } export const flowsNames = { @@ -25,6 +27,7 @@ export const flowsNames = { '@uniflow-io/uniflow-flow-assets': 'Assets Flow', '@uniflow-io/uniflow-flow-canvas': 'Canvas Flow', '@uniflow-io/uniflow-flow-object': 'Object Flow', + '@uniflow-io/uniflow-flow-html': 'HTML Flow', } export const flowsClients = { @@ -49,5 +52,8 @@ export const flowsClients = { '@uniflow-io/uniflow-flow-object': [ ClientType.UNIFLOW, ], + '@uniflow-io/uniflow-flow-html': [ + ClientType.UNIFLOW, + ], } diff --git a/assets/shop/models/runner.js b/assets/shop/models/runner.js index 4c33a9a9..293c2689 100644 --- a/assets/shop/models/runner.js +++ b/assets/shop/models/runner.js @@ -234,7 +234,7 @@ export default class Runner { // Create a shared context that persists across iterations const sharedContext = { console: consoleBridge, - axios: fetchBridge, + fetch: fetchBridge, }; // Get the keys from shared context for dynamic exclusion diff --git a/package-lock.json b/package-lock.json index dd4bc8e6..6f3f742c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "sylius", + "name": "uniflow", "lockfileVersion": 3, "requires": true, "packages": { @@ -16,6 +16,7 @@ "@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets", "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "bazinga-translator": "^7.0.0", + "dompurify": "^3.2.2", "intl-messageformat": "^10.7.16", "lodash.get": "^4.4.2", "prism-react-renderer": "^2.4.1", @@ -42,19 +43,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", @@ -91,30 +79,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", - "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.3", - "@babel/parser": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -389,25 +377,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", - "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", - "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -666,9 +654,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", + "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -713,9 +701,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", - "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -723,7 +711,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1093,16 +1081,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1291,9 +1279,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", - "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1595,18 +1583,18 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", - "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.3.tgz", - "integrity": "sha512-LKYxD2CIfocUFNREQ1yk+dW+8OH8CRqmgatBZYXb+XhuObO8wsDpEoCNri5bKld9cnj8xukqZjxSX8p1YiRF8Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1631,17 +1619,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", + "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", + "@babel/types": "^7.28.4", "debug": "^4.3.1" }, "engines": { @@ -1649,9 +1637,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1919,9 +1907,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", "cpu": [ "ppc64" ], @@ -1936,9 +1924,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", "cpu": [ "arm" ], @@ -1953,9 +1941,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", "cpu": [ "arm64" ], @@ -1970,9 +1958,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", "cpu": [ "x64" ], @@ -1987,9 +1975,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", "cpu": [ "arm64" ], @@ -2004,9 +1992,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", "cpu": [ "x64" ], @@ -2021,9 +2009,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", "cpu": [ "arm64" ], @@ -2038,9 +2026,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", "cpu": [ "x64" ], @@ -2055,9 +2043,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", "cpu": [ "arm" ], @@ -2072,9 +2060,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", "cpu": [ "arm64" ], @@ -2089,9 +2077,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", "cpu": [ "ia32" ], @@ -2106,9 +2094,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", "cpu": [ "loong64" ], @@ -2123,9 +2111,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", "cpu": [ "mips64el" ], @@ -2140,9 +2128,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", "cpu": [ "ppc64" ], @@ -2157,9 +2145,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", "cpu": [ "riscv64" ], @@ -2174,9 +2162,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", "cpu": [ "s390x" ], @@ -2191,9 +2179,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", "cpu": [ "x64" ], @@ -2208,9 +2196,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", "cpu": [ "arm64" ], @@ -2225,9 +2213,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", "cpu": [ "x64" ], @@ -2242,9 +2230,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", "cpu": [ "arm64" ], @@ -2259,9 +2247,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", "cpu": [ "x64" ], @@ -2276,9 +2264,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", "cpu": [ "arm64" ], @@ -2293,9 +2281,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", "cpu": [ "x64" ], @@ -2310,9 +2298,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", "cpu": [ "arm64" ], @@ -2327,9 +2315,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", "cpu": [ "ia32" ], @@ -2344,9 +2332,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", "cpu": [ "x64" ], @@ -2437,46 +2425,46 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.0.0.tgz", - "integrity": "sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.0.1.tgz", + "integrity": "sha512-0VpNtO5cNe1/HQWMkl4OdncYK/mv9hnBte0Ew0n6DMzmo3Q3WzDFABHm6LeNTipt5zAyhQ6Ugjiu8aLaEjh1gg==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.0.0.tgz", - "integrity": "sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.0.1.tgz", + "integrity": "sha512-x0cR55ILVqFpUioSMf6ebpRCMXMcheGN743P05W2RB5uCNpJUqWIqW66Lap8PfL/lngvjTbZj0BNSUweIr/fHQ==", "license": "MIT", "peer": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "7.0.0" + "@fortawesome/fontawesome-common-types": "7.0.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-7.0.0.tgz", - "integrity": "sha512-qAh0mTaCY22sQzMK2lKBrtn/aR4keUu5XmtdYR7d702laMe0h+Ab4Kj2pExR9HZkKhjKoq8pbwt8Td+mjW/ipQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-7.0.1.tgz", + "integrity": "sha512-4V9fHbHjcx9Qu4O99AM5B4zuEDfB4zajk1I77hEzOxPN00f8g3484Aeq6WpfFcmookvjLE3Pr71Dhf/lqw7tbA==", "license": "(CC-BY-4.0 AND MIT)", "dependencies": { - "@fortawesome/fontawesome-common-types": "7.0.0" + "@fortawesome/fontawesome-common-types": "7.0.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.0.0.tgz", - "integrity": "sha512-njSLAllkOddYDCXgTFboXn54Oe5FcvpkWq+FoetOHR64PbN0608kM02Lze0xtISGpXgP+i26VyXRQA0Irh3Obw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.0.1.tgz", + "integrity": "sha512-esKuSrl1WMOTMDLNt38i16VfLe/gRZt2ZAJ3Yw7slfs7sj583MKqNFqO57zmhknk1Sya6f9Wys89aCzIJkcqlg==", "license": "(CC-BY-4.0 AND MIT)", "dependencies": { - "@fortawesome/fontawesome-common-types": "7.0.0" + "@fortawesome/fontawesome-common-types": "7.0.1" }, "engines": { "node": ">=6" @@ -2619,6 +2607,16 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -2645,9 +2643,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2699,9 +2697,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz", - "integrity": "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", "cpu": [ "arm" ], @@ -2713,9 +2711,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz", - "integrity": "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", "cpu": [ "arm64" ], @@ -2727,9 +2725,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz", - "integrity": "sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", "cpu": [ "arm64" ], @@ -2741,9 +2739,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz", - "integrity": "sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", "cpu": [ "x64" ], @@ -2755,9 +2753,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz", - "integrity": "sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", "cpu": [ "arm64" ], @@ -2769,9 +2767,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz", - "integrity": "sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", "cpu": [ "x64" ], @@ -2783,9 +2781,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz", - "integrity": "sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", "cpu": [ "arm" ], @@ -2797,9 +2795,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz", - "integrity": "sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", "cpu": [ "arm" ], @@ -2811,9 +2809,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz", - "integrity": "sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", "cpu": [ "arm64" ], @@ -2825,9 +2823,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz", - "integrity": "sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", "cpu": [ "arm64" ], @@ -2838,10 +2836,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz", - "integrity": "sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", "cpu": [ "loong64" ], @@ -2853,9 +2851,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz", - "integrity": "sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", "cpu": [ "ppc64" ], @@ -2867,9 +2865,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz", - "integrity": "sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", "cpu": [ "riscv64" ], @@ -2881,9 +2879,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz", - "integrity": "sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", "cpu": [ "riscv64" ], @@ -2895,9 +2893,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz", - "integrity": "sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", "cpu": [ "s390x" ], @@ -2909,9 +2907,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz", - "integrity": "sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", "cpu": [ "x64" ], @@ -2923,9 +2921,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz", - "integrity": "sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", "cpu": [ "x64" ], @@ -2936,10 +2934,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz", - "integrity": "sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", "cpu": [ "arm64" ], @@ -2951,9 +2963,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz", - "integrity": "sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", "cpu": [ "ia32" ], @@ -2964,10 +2976,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz", - "integrity": "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", "cpu": [ "x64" ], @@ -3366,12 +3392,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", + "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "undici-types": "~7.12.0" } }, "node_modules/@types/node-fetch": { @@ -3398,9 +3424,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz", - "integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==", + "version": "19.1.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.14.tgz", + "integrity": "sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q==", "license": "MIT", "peer": true, "dependencies": { @@ -3416,6 +3442,13 @@ "@types/react": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, "node_modules/@types/webpack-env": { "version": "1.18.8", "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.8.tgz", @@ -3993,6 +4026,15 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.8.tgz", + "integrity": "sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/bazinga-translator": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/bazinga-translator/-/bazinga-translator-7.0.0.tgz", @@ -4058,9 +4100,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", - "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", "funding": [ { "type": "opencollective", @@ -4077,9 +4119,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", - "node-releases": "^2.0.19", + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { @@ -4141,9 +4184,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001737", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", - "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", + "version": "1.0.30001745", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz", + "integrity": "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==", "funding": [ { "type": "opencollective", @@ -4430,9 +4473,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" @@ -4789,9 +4832,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4933,6 +4976,15 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", + "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -4963,9 +5015,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.209", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.209.tgz", - "integrity": "sha512-Xoz0uMrim9ZETCQt8UgM5FxQF9+imA7PBpokoGcZloA1uw2LeHzTlip5cb5KOAsXZLjh/moN2vReN3ZjJmjI9A==", + "version": "1.5.224", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.224.tgz", + "integrity": "sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg==", "license": "ISC" }, "node_modules/element-class": { @@ -5012,9 +5064,9 @@ } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.15.0.tgz", + "integrity": "sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g==", "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -5024,9 +5076,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -5097,9 +5149,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5110,32 +5162,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, "node_modules/escalade": { @@ -6228,9 +6280,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.18", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", - "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "dev": true, "license": "MIT", "dependencies": { @@ -6446,9 +6498,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", "license": "MIT" }, "node_modules/normalize-path": { @@ -6473,9 +6525,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", - "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", "dev": true, "license": "MIT" }, @@ -7481,9 +7533,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -7499,17 +7551,17 @@ "license": "MIT" }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -7522,29 +7574,17 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -7659,9 +7699,9 @@ } }, "node_modules/rollup": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.1.tgz", - "integrity": "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", "dev": true, "license": "MIT", "dependencies": { @@ -7675,26 +7715,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.48.1", - "@rollup/rollup-android-arm64": "4.48.1", - "@rollup/rollup-darwin-arm64": "4.48.1", - "@rollup/rollup-darwin-x64": "4.48.1", - "@rollup/rollup-freebsd-arm64": "4.48.1", - "@rollup/rollup-freebsd-x64": "4.48.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.48.1", - "@rollup/rollup-linux-arm-musleabihf": "4.48.1", - "@rollup/rollup-linux-arm64-gnu": "4.48.1", - "@rollup/rollup-linux-arm64-musl": "4.48.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.48.1", - "@rollup/rollup-linux-ppc64-gnu": "4.48.1", - "@rollup/rollup-linux-riscv64-gnu": "4.48.1", - "@rollup/rollup-linux-riscv64-musl": "4.48.1", - "@rollup/rollup-linux-s390x-gnu": "4.48.1", - "@rollup/rollup-linux-x64-gnu": "4.48.1", - "@rollup/rollup-linux-x64-musl": "4.48.1", - "@rollup/rollup-win32-arm64-msvc": "4.48.1", - "@rollup/rollup-win32-ia32-msvc": "4.48.1", - "@rollup/rollup-win32-x64-msvc": "4.48.1", + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", "fsevents": "~2.3.2" } }, @@ -8330,13 +8372,13 @@ } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -8499,14 +8541,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -8567,9 +8609,9 @@ } }, "node_modules/tinyspy": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", - "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, "license": "MIT", "engines": { @@ -8667,9 +8709,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.20.5", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz", - "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==", + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", "dependencies": { @@ -8701,9 +8743,9 @@ } }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", + "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", "license": "MIT" }, "node_modules/unescape": { @@ -8741,18 +8783,18 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "license": "MIT", "engines": { "node": ">=4" @@ -8878,9 +8920,9 @@ } }, "node_modules/vite-node/node_modules/vite": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", - "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", + "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "dev": true, "license": "MIT", "dependencies": { @@ -8889,7 +8931,7 @@ "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", - "tinyglobby": "^0.2.14" + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" @@ -9100,9 +9142,9 @@ } }, "node_modules/vitest/node_modules/vite": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", - "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", + "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "dev": true, "license": "MIT", "dependencies": { @@ -9111,7 +9153,7 @@ "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", - "tinyglobby": "^0.2.14" + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" diff --git a/package.json b/package.json index 591d677a..6104eb37 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets", "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "bazinga-translator": "^7.0.0", + "dompurify": "^3.2.2", "intl-messageformat": "^10.7.16", "lodash.get": "^4.4.2", "prism-react-renderer": "^2.4.1", From cfed307084e847982b6e6ac81596ec5e24d192d5 Mon Sep 17 00:00:00 2001 From: Mathieu Ledru Date: Mon, 6 Oct 2025 11:08:21 +0200 Subject: [PATCH 4/5] :sparkles: Introduce HTML Flow component for safe HTML rendering in automation flows --- .../2025-10-06-html-flow/images/cover.png | Bin 0 -> 32621 bytes .../docs/blog/2025-10-06-html-flow/index.md | 35 ++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 assets/docs/blog/2025-10-06-html-flow/images/cover.png create mode 100644 assets/docs/blog/2025-10-06-html-flow/index.md diff --git a/assets/docs/blog/2025-10-06-html-flow/images/cover.png b/assets/docs/blog/2025-10-06-html-flow/images/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..b53abc82ca2682ef70839cbb30bb6fc6bebc9a5c GIT binary patch literal 32621 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 P1YB25txYP7adE!`+G615 literal 0 HcmV?d00001 diff --git a/assets/docs/blog/2025-10-06-html-flow/index.md b/assets/docs/blog/2025-10-06-html-flow/index.md new file mode 100644 index 00000000..ba32447f --- /dev/null +++ b/assets/docs/blog/2025-10-06-html-flow/index.md @@ -0,0 +1,35 @@ +--- +title: HTML Flow Component +date: 2025-10-06 +author: Mathieu Ledru +cover: images/cover.png +coverSeo: images/cover.png +coverAuthor: Html +coverOriginalUrl: https://www.w3schools.com/html +tags: ["blog", "components", "html"] +--- + +Introducing HTML Flow: Safe HTML Rendering in Your Automation Flows! 🎨 +We're excited to announce the new HTML Flow component for Uniflow. This powerful addition allows you to safely render HTML content stored in variables directly within your automation flows. + +The HTML Flow component provides secure HTML rendering with built-in sanitization, making it perfect for displaying dynamic content, embedded media, or custom layouts in your automation interfaces. + +### Key Features + +- **Safe HTML Rendering**: The component automatically sanitizes HTML content, removing potentially dangerous elements like scripts, forms, and malicious attributes while preserving safe content like iframes with proper restrictions. +- **Variable Integration**: Simply specify a variable name that contains your HTML content, and the component will automatically fetch and display it from the runner context. +- **Real-time Preview**: See your HTML content rendered live as you build your flows, with immediate visual feedback. +- **Iframe Support**: Safely embed external content through iframes with automatic URL validation and attribute filtering. + +### How It Works + +The HTML Flow component takes a single input - the name of a variable containing HTML content. It then: + +1. Fetches the HTML from the runner context +2. Sanitizes the content using custom DOM filtering +3. Renders the safe HTML directly in the preview pane +4. Updates automatically when the variable content changes + +Perfect for creating rich, interactive automation interfaces that can display dynamic content, embedded media, or custom layouts while maintaining security and performance. + +Let's make your flows not just functional, but visually engaging! 🚀 From 390d343350f7dab0c0fb5eb573c0b0b554954659 Mon Sep 17 00:00:00 2001 From: Mathieu Ledru Date: Mon, 6 Oct 2025 11:13:02 +0200 Subject: [PATCH 5/5] :sparkles: Update changelog for release v1.1.18 - Add HTML Flow Component --- assets/docs/changelog.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/docs/changelog.yaml b/assets/docs/changelog.yaml index 3cd5e52d..333e2b73 100644 --- a/assets/docs/changelog.yaml +++ b/assets/docs/changelog.yaml @@ -1,3 +1,7 @@ +- tag: "v1.1.18" + label: |- + Add HTML Flow Component + date: "2025-10-06" - tag: "v1.1.17" label: |- Migrate to Symfony UX