diff --git a/.env.gui b/.env.gui index 731a75ba8..410a658b3 100644 --- a/.env.gui +++ b/.env.gui @@ -1,4 +1,4 @@ RELEASE=PRE-ALPHA-test -VERSION=1 -BUILD=1 -FIX=15 +VERSION=3 +BUILD=3 +FIX=4-test diff --git a/.github/workflows/check-version.yml b/.github/workflows/check-version.yml index 216209ddc..6740143a6 100644 --- a/.github/workflows/check-version.yml +++ b/.github/workflows/check-version.yml @@ -2,7 +2,7 @@ name: Check Version on: push: - branches: ["test", "stage", "main"] + branches: ["main"] workflow_dispatch: env: @@ -20,25 +20,8 @@ jobs: - name: Docker Setup BuildX uses: docker/setup-buildx-action@v2 - - name: Bump Patch Version - run: npm run bump-patch - if: ${{ env.BRANCH == 'test' }} - - - name: Sync Version - run: npm run sync-version - if: ${{ env.BRANCH != 'test' }} - - name: Generate Changelog run: npm run changelog - if: ${{ env.BRANCH == 'main' }} - - - name: Push changes to repo - run: | - git config --global user.name ${{ secrets.ADMIN_NAME }} - git config --global user.email ${{ secrets.ADMIN_EMAIL }} - git add . - git commit -m "docs: update version" - git push - name: Load environment variables run: | @@ -54,8 +37,6 @@ jobs: run: | echo "Building Docker image for branch: ${{ env.BRANCH }} major: ${{ env.MAJOR }} minor: ${{ env.MINOR }} patch: ${{ env.PATCH }}" cd GUI && docker image build --tag $DOCKER_TAG_CUSTOM --no-cache . - if: ${{ env.BRANCH == 'test' }} - - name: Log in to GitHub container registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin @@ -63,11 +44,9 @@ jobs: run: | echo "Pushing Docker image to GitHub Packages" docker push $DOCKER_TAG_CUSTOM - if: ${{ env.BRANCH == 'test' }} - name: Create Release uses: softprops/action-gh-release@v1 - if: ${{ env.BRANCH == 'main' }} with: tag_name: v${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }} generate_release_notes: true diff --git a/.github/workflows/ci-build-image.yml b/.github/workflows/ci-build-image.yml new file mode 100644 index 000000000..f20b30c01 --- /dev/null +++ b/.github/workflows/ci-build-image.yml @@ -0,0 +1,47 @@ +name: Build and publish GUI + +on: + push: + branches: [ v3.3.2 ] + paths: + - '.env.gui' + +jobs: + PackageDeploy: + runs-on: ubuntu-latest + + steps: + - name: Debugging Step + run: | + echo "Checking runner status..." + # Add more debugging commands as needed + + - uses: actions/checkout@v2 + + - name: Docker Setup BuildX + uses: docker/setup-buildx-action@v2 + + - name: Load environment variables and set them + run: | + if [ -f .env.gui ]; then + export $(cat .env.gui | grep -v '^#' | xargs) + fi + echo "RELEASE=$RELEASE" >> $GITHUB_ENV + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "BUILD=$BUILD" >> $GITHUB_ENV + echo "FIX=$FIX" >> $GITHUB_ENV + - name: Set repo + run: | + LOWER_CASE_GITHUB_REPOSITORY=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]') + echo "DOCKER_TAG_CUSTOM=ghcr.io/${LOWER_CASE_GITHUB_REPOSITORY}:$RELEASE-$VERSION.$BUILD.$FIX" >> $GITHUB_ENV + echo "$GITHUB_ENV" + - name: Docker Build + run: | + cd GUI + docker image build --tag $DOCKER_TAG_CUSTOM . + + - name: Log in to GitHub container registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin + + - name: Push Docker image to ghcr + run: docker push $DOCKER_TAG_CUSTOM diff --git a/.gitignore b/.gitignore index a8f470c1d..44977c210 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ .DS_Store .vscode .env +.env.gui **/node_modules **/dist diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..976962c9c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,434 @@ +### 1.1.44 (22, Jun 2026) +## Features +- **858**: docs by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#c9c68c69](https://github.com/buerokratt/Service-Module/commit/c9c68c69) +- **858**: simplify, better logs by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#0cad2ae2](https://github.com/buerokratt/Service-Module/commit/0cad2ae2) +- **858**: docs by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#6b8e24dd](https://github.com/buerokratt/Service-Module/commit/6b8e24dd) +- **800**: clean by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#0472745d](https://github.com/buerokratt/Service-Module/commit/0472745d) +- **800**: update Readme by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#64565661](https://github.com/buerokratt/Service-Module/commit/64565661) +- **800**: handle no vars by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#cf538409](https://github.com/buerokratt/Service-Module/commit/cf538409) +- **800**: implement core by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#6fb3e571](https://github.com/buerokratt/Service-Module/commit/6fb3e571) +- **800**: add sample by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#42f171bc](https://github.com/buerokratt/Service-Module/commit/42f171bc) +- **842**: Merge branch 'dev' into 842-sort-focus by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#bcd3f5f5](https://github.com/buerokratt/Service-Module/commit/bcd3f5f5) +- **842**: fix by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#182c5fcb](https://github.com/buerokratt/Service-Module/commit/182c5fcb) +- **841**: fix sonar by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#62b59247](https://github.com/buerokratt/Service-Module/commit/62b59247) +- **841**: fix bug by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#11735e10](https://github.com/buerokratt/Service-Module/commit/11735e10) +- **837**: fix lint by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#102fa79a](https://github.com/buerokratt/Service-Module/commit/102fa79a) +- **837**: add tests by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#b8c889b5](https://github.com/buerokratt/Service-Module/commit/b8c889b5) +- **837**: fix the bug by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#0e87e40d](https://github.com/buerokratt/Service-Module/commit/0e87e40d) +- **837**: fix sonar by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#16c6a9a0](https://github.com/buerokratt/Service-Module/commit/16c6a9a0) +- **837**: merge by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#2d4c6d09](https://github.com/buerokratt/Service-Module/commit/2d4c6d09) +- **837**: fix tests by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#64ef1f4b](https://github.com/buerokratt/Service-Module/commit/64ef1f4b) +- **837**: wip fix by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#aba08033](https://github.com/buerokratt/Service-Module/commit/aba08033) +- **837**: wip fix by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#774f6158](https://github.com/buerokratt/Service-Module/commit/774f6158) +- **829**: merge base by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#903f071e](https://github.com/buerokratt/Service-Module/commit/903f071e) +- **829**: clean by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#efff74ed](https://github.com/buerokratt/Service-Module/commit/efff74ed) +- **829**: fix prefs by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#5b439074](https://github.com/buerokratt/Service-Module/commit/5b439074) +- **829**: wip by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#fb4eda75](https://github.com/buerokratt/Service-Module/commit/fb4eda75) +- **829**: wip select by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#46d3c10e](https://github.com/buerokratt/Service-Module/commit/46d3c10e) +- **829**: wip select by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#d4de5483](https://github.com/buerokratt/Service-Module/commit/d4de5483) +- **798**: REVERT LATER by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#2c4f35d1](https://github.com/buerokratt/Service-Module/commit/2c4f35d1) +- **798**: refacto by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#6056afb1](https://github.com/buerokratt/Service-Module/commit/6056afb1) +- **798**: cm by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#7d81f754](https://github.com/buerokratt/Service-Module/commit/7d81f754) +- **798**: cm by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#72480a4f](https://github.com/buerokratt/Service-Module/commit/72480a4f) +- **798**: edit by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#84da856a](https://github.com/buerokratt/Service-Module/commit/84da856a) +- **798**: clean by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#a434a3aa](https://github.com/buerokratt/Service-Module/commit/a434a3aa) +- **798**: delete by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#3a83347a](https://github.com/buerokratt/Service-Module/commit/3a83347a) +- **798**: one acc by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#624c048d](https://github.com/buerokratt/Service-Module/commit/624c048d) +- **798**: wip connection by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#8c84d442](https://github.com/buerokratt/Service-Module/commit/8c84d442) +- **798**: wfix DC by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#b042de32](https://github.com/buerokratt/Service-Module/commit/b042de32) +- **798**: wfix DC by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#e4c60c05](https://github.com/buerokratt/Service-Module/commit/e4c60c05) +- **798**: wip DC by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#546f2494](https://github.com/buerokratt/Service-Module/commit/546f2494) +- **798**: clean add/edit by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#c967e0e2](https://github.com/buerokratt/Service-Module/commit/c967e0e2) +- **798**: prep and todo by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#a2b98cf1](https://github.com/buerokratt/Service-Module/commit/a2b98cf1) +- **798**: prep and todo by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#7e3e59fb](https://github.com/buerokratt/Service-Module/commit/7e3e59fb) +## Fixes +- **1075**: Fixed conditional sucess and failure switch (#1078) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#d31b1479](https://github.com/buerokratt/Service-Module/commit/d31b1479) +- **1066**: Fixed conditional label on reconnect (#1077) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#73fb412f](https://github.com/buerokratt/Service-Module/commit/73fb412f) +- **1062**: Fixed Loop Target Layout Breaking Upstream Nodes by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#80e02138](https://github.com/buerokratt/Service-Module/commit/80e02138) +- **1059**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#26fbb004](https://github.com/buerokratt/Service-Module/commit/26fbb004) +- **1059**: Fixed Branch Edge Merge After Node Deletion by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#ef79980f](https://github.com/buerokratt/Service-Module/commit/ef79980f) +- **1033**: Passed ChatId and Author Id to next service (#1069) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#680f5cc9](https://github.com/buerokratt/Service-Module/commit/680f5cc9) +- **1042**: Fixed MCQ Manual Connection Breaks Subsequent Nodes by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f2623680](https://github.com/buerokratt/Service-Module/commit/f2623680) +- **1047**: Fixed MCQ Input Connection Becomes Inactive by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#1dd5260e](https://github.com/buerokratt/Service-Module/commit/1dd5260e) +- **1037**: fixed mcq question rendering by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8ed7df05](https://github.com/buerokratt/Service-Module/commit/8ed7df05) +- **1033**: Fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#14393a6f](https://github.com/buerokratt/Service-Module/commit/14393a6f) +- **1033**: Fixed service name typo by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8b653215](https://github.com/buerokratt/Service-Module/commit/8b653215) +- **1024**: Fixed canvas endpoint width by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3bcca71e](https://github.com/buerokratt/Service-Module/commit/3bcca71e) +- **972**: Fixed s3 local container by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e4419938](https://github.com/buerokratt/Service-Module/commit/e4419938) +- **972**: Fixed moving mcq services from active to draft by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f31dc6a0](https://github.com/buerokratt/Service-Module/commit/f31dc6a0) +- **965**: Fixed handlebars by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#b3c2544e](https://github.com/buerokratt/Service-Module/commit/b3c2544e) +- **1023**: Fixed api registry table overflow on smaller screens by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#27c29ff3](https://github.com/buerokratt/Service-Module/commit/27c29ff3) +- **1022**: Fixed border spacing in api elements by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8b1878d8](https://github.com/buerokratt/Service-Module/commit/8b1878d8) +- **1022**: Elements modal dark mode fix by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#dc0e557d](https://github.com/buerokratt/Service-Module/commit/dc0e557d) +- **1024**: Fixed endpoint modal overflow by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#c4070392](https://github.com/buerokratt/Service-Module/commit/c4070392) +- **1021**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#02caea25](https://github.com/buerokratt/Service-Module/commit/02caea25) +- **1021**: tooltip overflow in api registry page by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6767df54](https://github.com/buerokratt/Service-Module/commit/6767df54) +- **961**: Fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#42774cf0](https://github.com/buerokratt/Service-Module/commit/42774cf0) +- **961**: Fixed name normalization by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#cd5f089f](https://github.com/buerokratt/Service-Module/commit/cd5f089f) +- **982**: Fix conflicting mcq in insert node by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#2b9918a4](https://github.com/buerokratt/Service-Module/commit/2b9918a4) +- **987**: Remove test tab from nodes by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#697cf073](https://github.com/buerokratt/Service-Module/commit/697cf073) +- **987**: Chat widget dark mode text color by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a84d34a8](https://github.com/buerokratt/Service-Module/commit/a84d34a8) +- **987**: Fixed Date & time / Separator dropdown going out of bounds by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#cd1ff0f3](https://github.com/buerokratt/Service-Module/commit/cd1ff0f3) +- **963**: Addressed comments by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#b4ab0759](https://github.com/buerokratt/Service-Module/commit/b4ab0759) +- **963**: fix format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6b267907](https://github.com/buerokratt/Service-Module/commit/6b267907) +- **993**: Reverted generateUniqueId by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7462aad9](https://github.com/buerokratt/Service-Module/commit/7462aad9) +- **993**: Fixed mcq buttons ui by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d15c0d4e](https://github.com/buerokratt/Service-Module/commit/d15c0d4e) +- **984**: Fixed bullet overflow by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#cf1dd2ae](https://github.com/buerokratt/Service-Module/commit/cf1dd2ae) +- **916**: Fixed export by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7a98305c](https://github.com/buerokratt/Service-Module/commit/7a98305c) +- **916**: Fixed Service missing search field by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e5f0b674](https://github.com/buerokratt/Service-Module/commit/e5f0b674) +- **986**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#4985806d](https://github.com/buerokratt/Service-Module/commit/4985806d) +- **988**: fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8225cc5d](https://github.com/buerokratt/Service-Module/commit/8225cc5d) +- **988**: fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#dbe8ee12](https://github.com/buerokratt/Service-Module/commit/dbe8ee12) +- **986**: fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#204d73c0](https://github.com/buerokratt/Service-Module/commit/204d73c0) +- **988**: Fixed configuration examples specfic example deletion by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#074eca6f](https://github.com/buerokratt/Service-Module/commit/074eca6f) +- **986**: Fixed dark mode bleeding by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d9fc4998](https://github.com/buerokratt/Service-Module/commit/d9fc4998) +- **976**: Handled numeric content by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#964dd89c](https://github.com/buerokratt/Service-Module/commit/964dd89c) +- **972**: Fixed file path according to state by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#ebcee7d2](https://github.com/buerokratt/Service-Module/commit/ebcee7d2) +- **985**: Fixed sonar issue by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#2b0cef4f](https://github.com/buerokratt/Service-Module/commit/2b0cef4f) +- **985**: Fixed hyper link rendering by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#903f3986](https://github.com/buerokratt/Service-Module/commit/903f3986) +- **1888**: Updated header version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#fd974c57](https://github.com/buerokratt/Service-Module/commit/fd974c57) +- **959**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a3a7fd15](https://github.com/buerokratt/Service-Module/commit/a3a7fd15) +- **959**: Fixed ready service test path by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7828d85a](https://github.com/buerokratt/Service-Module/commit/7828d85a) +- **964**: Fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#2f8860a0](https://github.com/buerokratt/Service-Module/commit/2f8860a0) +- **964**: Fixed import big services by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8f2e513d](https://github.com/buerokratt/Service-Module/commit/8f2e513d) +- **964**: Fixed continue error throw by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#973835c8](https://github.com/buerokratt/Service-Module/commit/973835c8) +- **964**: Fixed overview pagination state by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#60c8b13d](https://github.com/buerokratt/Service-Module/commit/60c8b13d) +- **958**: Fixed save toast showing early by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f45d6f61](https://github.com/buerokratt/Service-Module/commit/f45d6f61) +- **798**: Delete blob on status change from active by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#99da26ff](https://github.com/buerokratt/Service-Module/commit/99da26ff) +- **893**: Fixed value check in condition by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#323332ce](https://github.com/buerokratt/Service-Module/commit/323332ce) +- **827**: Fixed yes/no service break by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#58680bad](https://github.com/buerokratt/Service-Module/commit/58680bad) +- **895**: Fixed beakline by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f49c4390](https://github.com/buerokratt/Service-Module/commit/f49c4390) +- **827**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#87c6198e](https://github.com/buerokratt/Service-Module/commit/87c6198e) +- **827**: Fixed special characters by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#fabf3d36](https://github.com/buerokratt/Service-Module/commit/fabf3d36) +- **909**: Fixed rules drag value by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6f9f5a32](https://github.com/buerokratt/Service-Module/commit/6f9f5a32) +- **897**: Fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d8908b1d](https://github.com/buerokratt/Service-Module/commit/d8908b1d) +- **897**: Fixed Format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#60894a74](https://github.com/buerokratt/Service-Module/commit/60894a74) +- **897**: Fixed Raw Body Parsing in intial loading by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#b49afa6b](https://github.com/buerokratt/Service-Module/commit/b49afa6b) +- **893**: Fixed Conditional manual values not cast to string, comparison fails by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#543dfada](https://github.com/buerokratt/Service-Module/commit/543dfada) +- **899**: Fixed double warning save on name exist by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#bfcb602d](https://github.com/buerokratt/Service-Module/commit/bfcb602d) +- **892**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6e4098f4](https://github.com/buerokratt/Service-Module/commit/6e4098f4) +- **892**: Fixed deletion redo by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#b5ebe05e](https://github.com/buerokratt/Service-Module/commit/b5ebe05e) +- **891**: Fixed Import History by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#c8963caa](https://github.com/buerokratt/Service-Module/commit/c8963caa) +- **890**: Fixed on connect state by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#747b511e](https://github.com/buerokratt/Service-Module/commit/747b511e) +- **888**: Fixed paste node history save by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f629d959](https://github.com/buerokratt/Service-Module/commit/f629d959) +- **886**: Fixed multiple history save on finishing step by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#203e7c19](https://github.com/buerokratt/Service-Module/commit/203e7c19) +- **886**: fix Dynamic Choice/ assign replacement by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#2962d283](https://github.com/buerokratt/Service-Module/commit/2962d283) +- **827**: Added Tab Spaces fix by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3d85f719](https://github.com/buerokratt/Service-Module/commit/3d85f719) +- **853**: Fixed Service name in button payloads by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#299822d2](https://github.com/buerokratt/Service-Module/commit/299822d2) +- **856**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8d43a1cf](https://github.com/buerokratt/Service-Module/commit/8d43a1cf) +- **1704**: Fixed Package-lock.json by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#da76eb1c](https://github.com/buerokratt/Service-Module/commit/da76eb1c) +- **873**: Fixed Lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#ad446939](https://github.com/buerokratt/Service-Module/commit/ad446939) +- **873**: Fixed Format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#c0709377](https://github.com/buerokratt/Service-Module/commit/c0709377) +- **860**: Fixed Explain Endpoint Raw Body Handling by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#fb5b3c07](https://github.com/buerokratt/Service-Module/commit/fb5b3c07) +- **861**: Fixed Lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3b017fee](https://github.com/buerokratt/Service-Module/commit/3b017fee) +- **861**: Fixed Format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f85bc256](https://github.com/buerokratt/Service-Module/commit/f85bc256) +- **733**: Fixed Undo/Redo Issues (#835) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#4304500c](https://github.com/buerokratt/Service-Module/commit/4304500c) +- **814**: Removed Unnecessary data stored in node by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#5371f401](https://github.com/buerokratt/Service-Module/commit/5371f401) +## Chores +- **1063**: Added conditional node output handling (#1079) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#30d70fc8](https://github.com/buerokratt/Service-Module/commit/30d70fc8) +- **1068**: Added chat id to predefinedInputKeys (#1071) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#e811a5dd](https://github.com/buerokratt/Service-Module/commit/e811a5dd) +- **1958**: bumped menu package version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#4f6df5bf](https://github.com/buerokratt/Service-Module/commit/4f6df5bf) +- **725**: Bumped menu version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#aaf56e52](https://github.com/buerokratt/Service-Module/commit/aaf56e52) +- **1042**: FIxed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a60f8eef](https://github.com/buerokratt/Service-Module/commit/a60f8eef) +- **1033**: Addressed PR Comments by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f7338054](https://github.com/buerokratt/Service-Module/commit/f7338054) +- **1047**: Modified node and edges setting by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8d8d320c](https://github.com/buerokratt/Service-Module/commit/8d8d320c) +- **1907**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#0ccfbf7c](https://github.com/buerokratt/Service-Module/commit/0ccfbf7c) +- **1033**: Maintain State by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7c08ea6b](https://github.com/buerokratt/Service-Module/commit/7c08ea6b) +- **1033**: Changed Assign Builder to JumpToServiceInputBuilder by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#46836a1d](https://github.com/buerokratt/Service-Module/commit/46836a1d) +- **1990**: Modified layout by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7c9374bd](https://github.com/buerokratt/Service-Module/commit/7c9374bd) +- **1990**: Bumped up header package version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#99dbd504](https://github.com/buerokratt/Service-Module/commit/99dbd504) +- **1033**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#537e1ce3](https://github.com/buerokratt/Service-Module/commit/537e1ce3) +- **1033**: Enhance form select by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d6a206b0](https://github.com/buerokratt/Service-Module/commit/d6a206b0) +- **1033**: Renamed function by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#018a1441](https://github.com/buerokratt/Service-Module/commit/018a1441) +- **1033**: Fixed passing input by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a15a5bbc](https://github.com/buerokratt/Service-Module/commit/a15a5bbc) +- **1033**: Changed parameters to input by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#215c17fd](https://github.com/buerokratt/Service-Module/commit/215c17fd) +- **1033**: Added Step Handle by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#5659b758](https://github.com/buerokratt/Service-Module/commit/5659b758) +- **1033**: Handle step saving by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#1aa39db6](https://github.com/buerokratt/Service-Module/commit/1aa39db6) +- **1033**: Fixed lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#177c6025](https://github.com/buerokratt/Service-Module/commit/177c6025) +- **1033**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f1aa0be8](https://github.com/buerokratt/Service-Module/commit/f1aa0be8) +- **1033**: Modify jump to service template by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#98151502](https://github.com/buerokratt/Service-Module/commit/98151502) +- **1033**: Added jump to service step by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#83ad5b46](https://github.com/buerokratt/Service-Module/commit/83ad5b46) +- **965**: Added entities to text_for_embedding by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#75bc3373](https://github.com/buerokratt/Service-Module/commit/75bc3373) +- **1022**: changed data table padding by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#92460fb2](https://github.com/buerokratt/Service-Module/commit/92460fb2) +- **987**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#99c21400](https://github.com/buerokratt/Service-Module/commit/99c21400) +- **987**: Aligned examples and keywords value fields spacing by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7732a9ee](https://github.com/buerokratt/Service-Module/commit/7732a9ee) +- **987**: Removed chat content height by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#df7e1838](https://github.com/buerokratt/Service-Module/commit/df7e1838) +- **987**: make edge selection more visible by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6c5fefff](https://github.com/buerokratt/Service-Module/commit/6c5fefff) +- **987**: Modified translations by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#0a92a892](https://github.com/buerokratt/Service-Module/commit/0a92a892) +- **987**: Modified translations and dark mode node selections by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8feccfed](https://github.com/buerokratt/Service-Module/commit/8feccfed) +- **963**: Add import only flow option by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#293e115d](https://github.com/buerokratt/Service-Module/commit/293e115d) +- **963**: Fixed format and lint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3743cde1](https://github.com/buerokratt/Service-Module/commit/3743cde1) +- **963**: Added Service settings to service import/export by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#ebce0db8](https://github.com/buerokratt/Service-Module/commit/ebce0db8) +- **1016**: stripped html from mcq question by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e583908a](https://github.com/buerokratt/Service-Module/commit/e583908a) +- **982**: Addressed PR Comments by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#1d6bd9b1](https://github.com/buerokratt/Service-Module/commit/1d6bd9b1) +- **982**: Handled buttons long texts by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#b5866048](https://github.com/buerokratt/Service-Module/commit/b5866048) +- **982**: Added mcq branch manual connection support by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#22c69fef](https://github.com/buerokratt/Service-Module/commit/22c69fef) +- **993**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#365ae65b](https://github.com/buerokratt/Service-Module/commit/365ae65b) +- **999**: Replaced Text area in mcq with FormRichText by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#bf67677a](https://github.com/buerokratt/Service-Module/commit/bf67677a) +- **1907**: Bumped menu version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#6b2f827d](https://github.com/buerokratt/Service-Module/commit/6b2f827d) +- **1888**: updated header package by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#833fdf4b](https://github.com/buerokratt/Service-Module/commit/833fdf4b) +- **1888**: Added missing end of file by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#fc38ab05](https://github.com/buerokratt/Service-Module/commit/fc38ab05) +- **1888**: updated header package and added multidomain fetch by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d6a94570](https://github.com/buerokratt/Service-Module/commit/d6a94570) +- **1876**: Bumped package version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#bb00631c](https://github.com/buerokratt/Service-Module/commit/bb00631c) +- **798**: Added Azurite Terminal Notes by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#bb439614](https://github.com/buerokratt/Service-Module/commit/bb439614) +- **913**: added sorting/pagination/search to common endpoints by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#9e403386](https://github.com/buerokratt/Service-Module/commit/9e403386) +- **827**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8dbc251e](https://github.com/buerokratt/Service-Module/commit/8dbc251e) +- **638**: Enhanced Markdownify by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e6c95d84](https://github.com/buerokratt/Service-Module/commit/e6c95d84) +- **827**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#29b8f020](https://github.com/buerokratt/Service-Module/commit/29b8f020) +- **895**: Added Fixed Text Width and capped longed text by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3fc5de6a](https://github.com/buerokratt/Service-Module/commit/3fc5de6a) +- **898**: Added Base pill to api previous pills by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e23c8891](https://github.com/buerokratt/Service-Module/commit/e23c8891) +- **853**: Fixed format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#382d94e3](https://github.com/buerokratt/Service-Module/commit/382d94e3) +- **1735**: Sanitize Markdowify by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#06d7aa1c](https://github.com/buerokratt/Service-Module/commit/06d7aa1c) +- **873**: Enhanced handleServicesImport by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8bdcf3cb](https://github.com/buerokratt/Service-Module/commit/8bdcf3cb) +- **856**: Fixed Overview by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#99ac96e1](https://github.com/buerokratt/Service-Module/commit/99ac96e1) +- **856**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d7b8782c](https://github.com/buerokratt/Service-Module/commit/d7b8782c) +- **873**: Synced with dev by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7cfd3c96](https://github.com/buerokratt/Service-Module/commit/7cfd3c96) +- **618**: Added backoffice and general knowledge and validate by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#eb542f3d](https://github.com/buerokratt/Service-Module/commit/eb542f3d) +- **1704**: Modified env.development by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#27fdc02d](https://github.com/buerokratt/Service-Module/commit/27fdc02d) +- **1704**: Modified env.development by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#d93972bb](https://github.com/buerokratt/Service-Module/commit/d93972bb) +- **1704**: Bumped menu package version by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#07616926](https://github.com/buerokratt/Service-Module/commit/07616926) +- **873**: Added Dsls Adding by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a3a83629](https://github.com/buerokratt/Service-Module/commit/a3a83629) +- **873**: Fixed Passed Structure by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3e743926](https://github.com/buerokratt/Service-Module/commit/3e743926) +- **873**: Added Import Services Endpoint by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7387df7d](https://github.com/buerokratt/Service-Module/commit/7387df7d) +- **873**: Added handleImportServices function by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e23d147e](https://github.com/buerokratt/Service-Module/commit/e23d147e) +- **873**: Added Missing Translations by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#2ba0d1cc](https://github.com/buerokratt/Service-Module/commit/2ba0d1cc) +- **873**: Added Import Button by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3bbd1a81](https://github.com/buerokratt/Service-Module/commit/3bbd1a81) +- **861**: Modified Format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#7784538e](https://github.com/buerokratt/Service-Module/commit/7784538e) +- **861**: Enhanced get-services-list by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#dd38d721](https://github.com/buerokratt/Service-Module/commit/dd38d721) +- **861**: Removed Duplications by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#fb87a05d](https://github.com/buerokratt/Service-Module/commit/fb87a05d) +- **861**: Addressed PR Comments by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#ff440951](https://github.com/buerokratt/Service-Module/commit/ff440951) +- **861**: Added Name Sort by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#93297acb](https://github.com/buerokratt/Service-Module/commit/93297acb) +- **861**: Enhanced Export Services Modal by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#591127a8](https://github.com/buerokratt/Service-Module/commit/591127a8) +- **861**: Added Search Functionality by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#e558d563](https://github.com/buerokratt/Service-Module/commit/e558d563) +- **861**: Added Zip Support by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#8410cc8f](https://github.com/buerokratt/Service-Module/commit/8410cc8f) +- **861**: Enhanced Export by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#3976d156](https://github.com/buerokratt/Service-Module/commit/3976d156) +- **861**: Added Export Model by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#db6c9b2c](https://github.com/buerokratt/Service-Module/commit/db6c9b2c) +- **853**: Fixed Tests by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#0fa10300](https://github.com/buerokratt/Service-Module/commit/0fa10300) +- **853**: Passed Inputs to test service by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#18045b07](https://github.com/buerokratt/Service-Module/commit/18045b07) +- **853**: Fixed Dynamic Choices Tooltip showing by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#f3c2235e](https://github.com/buerokratt/Service-Module/commit/f3c2235e) +- **853**: Hide Object Toggle Button from dynamic choices by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#a4bf9e16](https://github.com/buerokratt/Service-Module/commit/a4bf9e16) +- **853**: Added Buttons Support by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#5e1e8701](https://github.com/buerokratt/Service-Module/commit/5e1e8701) +- **833**: Fixed FitView on auto zoom is off (#843) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#a0dfe86d](https://github.com/buerokratt/Service-Module/commit/a0dfe86d) +- **844**: Passed Input as array of strings (#845) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#7564fd30](https://github.com/buerokratt/Service-Module/commit/7564fd30) +- **814**: Fixed Format by [@1AhmedYasser](https://www.github.com/1AhmedYasser) in [#35b494d1](https://github.com/buerokratt/Service-Module/commit/35b494d1) +## Others +- Merge pull request #1061 from 1AhmedYasser/knowledge-base-menu-migration by [@ffrose](https://www.github.com/ffrose) in [#9ba69a84](https://github.com/buerokratt/Service-Module/commit/9ba69a84) +- Merge pull request #1072 from 1AhmedYasser/Branch-Edge-Merge-After-Node-Deletion by [@ffrose](https://www.github.com/ffrose) in [#69f29b3a](https://github.com/buerokratt/Service-Module/commit/69f29b3a) +- Merge pull request #1073 from 1AhmedYasser/Loop-Target-Layout-Breaks-Upstream-Nodes by [@ffrose](https://www.github.com/ffrose) in [#030bb254](https://github.com/buerokratt/Service-Module/commit/030bb254) +- Merge pull request #1056 from rootcodelabs/fix/1050/placeholder_deletion_bug by [@ffrose](https://www.github.com/ffrose) in [#1d002fb3](https://github.com/buerokratt/Service-Module/commit/1d002fb3) +- Merge pull request #1052 from rootcodelabs/1049/UI-cleanup by [@ffrose](https://www.github.com/ffrose) in [#e4329a4b](https://github.com/buerokratt/Service-Module/commit/e4329a4b) +- Merge pull request #1057 from rootcodelabs/fix/1036/path_paramter_endpoint by [@ffrose](https://www.github.com/ffrose) in [#eaa15fdd](https://github.com/buerokratt/Service-Module/commit/eaa15fdd) +- Merge pull request #1040 from 1AhmedYasser/Jump-to-Active-Service by [@ffrose](https://www.github.com/ffrose) in [#e759e2ab](https://github.com/buerokratt/Service-Module/commit/e759e2ab) +- Merge pull request #1034 from 1AhmedYasser/Entity-embedding-enrichment by [@ffrose](https://www.github.com/ffrose) in [#a3ff8a4e](https://github.com/buerokratt/Service-Module/commit/a3ff8a4e) +- Merge pull request #1053 from 1AhmedYasser/remove-advisors-from-menu by [@ffrose](https://www.github.com/ffrose) in [#830fea1e](https://github.com/buerokratt/Service-Module/commit/830fea1e) +- sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#9b291003](https://github.com/buerokratt/Service-Module/commit/9b291003) +- Fix for failing example.yml when saving endpoint with path params by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#78b3b983](https://github.com/buerokratt/Service-Module/commit/78b3b983) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into fix/1050/placeholder_deletion_bug by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b6311818](https://github.com/buerokratt/Service-Module/commit/b6311818) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 1049/UI-cleanup by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#a1462ff3](https://github.com/buerokratt/Service-Module/commit/a1462ff3) +- Merge pull request #17 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#d10bf76d](https://github.com/buerokratt/Service-Module/commit/d10bf76d) +- Sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#ac5e8a0b](https://github.com/buerokratt/Service-Module/commit/ac5e8a0b) +- Placeholder deletion bug fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#0cfd2122](https://github.com/buerokratt/Service-Module/commit/0cfd2122) +- Merge pull request #1051 from 1AhmedYasser/fix-MCQ-Input-Connection-Becomes-Inactive by [@ffrose](https://www.github.com/ffrose) in [#378f7079](https://github.com/buerokratt/Service-Module/commit/378f7079) +- Sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f10354ea](https://github.com/buerokratt/Service-Module/commit/f10354ea) +- Merge pull request #1048 from rootcodelabs/1035/special-characters-key-names by [@Thiru Dinesh](https://www.github.com/ThiruDinesh) in [#242f1fcc](https://github.com/buerokratt/Service-Module/commit/242f1fcc) +- Merge pull request #1043 from rootcodelabs/fix/1036/path_paramter_endpoint by [@Thiru Dinesh](https://www.github.com/ThiruDinesh) in [#283d51d1](https://github.com/buerokratt/Service-Module/commit/283d51d1) +- Merge pull request #991 from 1AhmedYasser/Chat-analysis-management by [@ffrose](https://www.github.com/ffrose) in [#c9bfc1b6](https://github.com/buerokratt/Service-Module/commit/c9bfc1b6) +- Services and API Registry UI cleanup by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#385d2fd2](https://github.com/buerokratt/Service-Module/commit/385d2fd2) +- Merge pull request #1038 from 1AhmedYasser/hot-fix-move-mcq-files-from-active-to-draft by [@ffrose](https://www.github.com/ffrose) in [#dea422ff](https://github.com/buerokratt/Service-Module/commit/dea422ff) +- Merge pull request #1039 from 1AhmedYasser/Hot-fix-modify-canvas-endpoint-width by [@ffrose](https://www.github.com/ffrose) in [#7b492a96](https://github.com/buerokratt/Service-Module/commit/7b492a96) +- Merge pull request #1041 from 1AhmedYasser/Hot-Fix-MCQ-Asterisk-Character-Breaks-Message-Rendering by [@ffrose](https://www.github.com/ffrose) in [#6a291d09](https://github.com/buerokratt/Service-Module/commit/6a291d09) +- Tmplemneted- Support Special Characters in API Key Names by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#72def35e](https://github.com/buerokratt/Service-Module/commit/72def35e) +- Tmplemneted- Support Special Characters in API Key Names by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#fb38be63](https://github.com/buerokratt/Service-Module/commit/fb38be63) +- Merge pull request #1044 from 1AhmedYasser/multidomain-selection-covers-user-settings-menu by [@ffrose](https://www.github.com/ffrose) in [#2c330eac](https://github.com/buerokratt/Service-Module/commit/2c330eac) +- PR lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#af762d78](https://github.com/buerokratt/Service-Module/commit/af762d78) +- Fix - Path Parameter Endpoints Fail After Save by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f5e348e2](https://github.com/buerokratt/Service-Module/commit/f5e348e2) +- Merge pull request #16 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#857f30a3](https://github.com/buerokratt/Service-Module/commit/857f30a3) +- Merge pull request #1028 from 1AhmedYasser/Tooltip-overflow-in-API-Registry-name-column by [@ffrose](https://www.github.com/ffrose) in [#a10a73b2](https://github.com/buerokratt/Service-Module/commit/a10a73b2) +- Merge pull request #1031 from 1AhmedYasser/API-Registry-table-overflow-on-smaller-screens by [@ffrose](https://www.github.com/ffrose) in [#1b1e26cb](https://github.com/buerokratt/Service-Module/commit/1b1e26cb) +- Merge pull request #1030 from 1AhmedYasser/Elements-modal-fixes by [@ffrose](https://www.github.com/ffrose) in [#01aed985](https://github.com/buerokratt/Service-Module/commit/01aed985) +- Merge pull request #1029 from 1AhmedYasser/Fix-Endpoint-modal-overflow by [@ffrose](https://www.github.com/ffrose) in [#d8686408](https://github.com/buerokratt/Service-Module/commit/d8686408) +- Merge pull request #1026 from 1AhmedYasser/hot-fix-name-normaliza by [@ffrose](https://www.github.com/ffrose) in [#3de92ff9](https://github.com/buerokratt/Service-Module/commit/3de92ff9) +- Merge pull request #1025 from 1AhmedYasser/hot-fix-removed-conflicting-default-mcq-in-insert-node by [@ffrose](https://www.github.com/ffrose) in [#7c0edf90](https://github.com/buerokratt/Service-Module/commit/7c0edf90) +- Merge pull request #1019 from 1AhmedYasser/UI-Cleanup-and-Dark-Mode-Fixes by [@ffrose](https://www.github.com/ffrose) in [#5a182a49](https://github.com/buerokratt/Service-Module/commit/5a182a49) +- Merge pull request #1015 from 1AhmedYasser/Ability-to-Manually-Connect-MCQ-Paths by [@ffrose](https://www.github.com/ffrose) in [#f5fb8e1d](https://github.com/buerokratt/Service-Module/commit/f5fb8e1d) +- Merge pull request #1018 from 1AhmedYasser/Include-service-settings-metadata-in-export/import-JSON by [@ffrose](https://www.github.com/ffrose) in [#9364041a](https://github.com/buerokratt/Service-Module/commit/9364041a) +- Merge pull request #1017 from 1AhmedYasser/strip-html-from-mcq-question by [@ffrose](https://www.github.com/ffrose) in [#84a0d6f4](https://github.com/buerokratt/Service-Module/commit/84a0d6f4) +- Merge pull request #1011 from 1AhmedYasser/Ability-to-modify-and-present-text-in-MCQ-as-in-MTC by [@ffrose](https://www.github.com/ffrose) in [#40c94691](https://github.com/buerokratt/Service-Module/commit/40c94691) +- Merge pull request #1012 from rootcodelabs/996/manual_reindexing_of_endpoints by [@ffrose](https://www.github.com/ffrose) in [#75dff5ae](https://github.com/buerokratt/Service-Module/commit/75dff5ae) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 996/manual_reindexing_of_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1bdaf327](https://github.com/buerokratt/Service-Module/commit/1bdaf327) +- Merge pull request #15 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#904a9be3](https://github.com/buerokratt/Service-Module/commit/904a9be3) +- Merge pull request #1005 from rootcodelabs/990/notify_LLM_about_endpoints by [@ffrose](https://www.github.com/ffrose) in [#f5194b94](https://github.com/buerokratt/Service-Module/commit/f5194b94) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 990/notify_LLM_about_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#04149dbb](https://github.com/buerokratt/Service-Module/commit/04149dbb) +- Merge pull request #14 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#c3905158](https://github.com/buerokratt/Service-Module/commit/c3905158) +- Merge pull request #995 from rootcodelabs/981/path_param_support_for_endpoints by [@ffrose](https://www.github.com/ffrose) in [#c297ba0d](https://github.com/buerokratt/Service-Module/commit/c297ba0d) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 996/manual_reindexing_of_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1e52d147](https://github.com/buerokratt/Service-Module/commit/1e52d147) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 990/notify_LLM_about_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f30e10c6](https://github.com/buerokratt/Service-Module/commit/f30e10c6) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 981/path_param_support_for_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#6dde63da](https://github.com/buerokratt/Service-Module/commit/6dde63da) +- Merge pull request #13 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4bcc0fd2](https://github.com/buerokratt/Service-Module/commit/4bcc0fd2) +- Merge pull request #992 from rootcodelabs/923/endpoint_modal_alignment by [@ffrose](https://www.github.com/ffrose) in [#dbea1f64](https://github.com/buerokratt/Service-Module/commit/dbea1f64) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 923/endpoint_modal_alignment by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f67eca15](https://github.com/buerokratt/Service-Module/commit/f67eca15) +- Merge pull request #12 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4ca272a3](https://github.com/buerokratt/Service-Module/commit/4ca272a3) +- Merge pull request #989 from rootcodelabs/951/remove_public_private_endpoint_distiction by [@ffrose](https://www.github.com/ffrose) in [#a2195630](https://github.com/buerokratt/Service-Module/commit/a2195630) +- Merge pull request #1010 from 1AhmedYasser/MCQ-text-handling-and-cursor-behavior-issues by [@ffrose](https://www.github.com/ffrose) in [#b7a10b59](https://github.com/buerokratt/Service-Module/commit/b7a10b59) +- Merge pull request #1009 from 1AhmedYasser/MTC-bullet-overflow by [@ffrose](https://www.github.com/ffrose) in [#610820c1](https://github.com/buerokratt/Service-Module/commit/610820c1) +- Merge pull request #1008 from 1AhmedYasser/Export-button---missing-'search'-param by [@ffrose](https://www.github.com/ffrose) in [#39ab5ec0](https://github.com/buerokratt/Service-Module/commit/39ab5ec0) +- Merge pull request #1007 from 1AhmedYasser/Service-Settings-deletes-wrong-example by [@ffrose](https://www.github.com/ffrose) in [#6bc5bd4c](https://github.com/buerokratt/Service-Module/commit/6bc5bd4c) +- Merge pull request #1006 from 1AhmedYasser/Dark-mode-bleed-to-overview-page by [@ffrose](https://www.github.com/ffrose) in [#ab1f0809](https://github.com/buerokratt/Service-Module/commit/ab1f0809) +- Merge pull request #1003 from rootcodelabs/978/dynamic_json_body_variables by [@ffrose](https://www.github.com/ffrose) in [#091120f4](https://github.com/buerokratt/Service-Module/commit/091120f4) +- Lint issue fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#c4c997da](https://github.com/buerokratt/Service-Module/commit/c4c997da) +- Merge branch '990/notify_LLM_about_endpoints' of https://github.com/rootcodelabs/Service-Module into 996/manual_reindexing_of_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#ef8998f3](https://github.com/buerokratt/Service-Module/commit/ef8998f3) +- Issue fix - correct paramType not saved to DB by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4f0014ab](https://github.com/buerokratt/Service-Module/commit/4f0014ab) +- lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#accfa7f4](https://github.com/buerokratt/Service-Module/commit/accfa7f4) +- Reindex flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1221e57e](https://github.com/buerokratt/Service-Module/commit/1221e57e) +- Re-idex button integration with API by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b16a0d09](https://github.com/buerokratt/Service-Module/commit/b16a0d09) +- UI changes in API registry table for manual llm index trigerring by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#df0cad52](https://github.com/buerokratt/Service-Module/commit/df0cad52) +- DB schema changes to accomadate 996 task by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#9ff3f577](https://github.com/buerokratt/Service-Module/commit/9ff3f577) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 978/dynamic_json_body_variables by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1670c2da](https://github.com/buerokratt/Service-Module/commit/1670c2da) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 951/remove_public_private_endpoint_distiction by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#d3769759](https://github.com/buerokratt/Service-Module/commit/d3769759) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 923/endpoint_modal_alignment by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#0ecb0a32](https://github.com/buerokratt/Service-Module/commit/0ecb0a32) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 981/path_param_support_for_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1cfcbb68](https://github.com/buerokratt/Service-Module/commit/1cfcbb68) +- Issue fix in edit flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#205425a4](https://github.com/buerokratt/Service-Module/commit/205425a4) +- Issue fix in edit flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e140c6c2](https://github.com/buerokratt/Service-Module/commit/e140c6c2) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 990/notify_LLM_about_endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f85fc863](https://github.com/buerokratt/Service-Module/commit/f85fc863) +- Merge pull request #11 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#7e037988](https://github.com/buerokratt/Service-Module/commit/7e037988) +- Send endpoint data to LLM for indexing by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#62c03cd3](https://github.com/buerokratt/Service-Module/commit/62c03cd3) +- Send endpoint data to LLM for indexing by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#6e4b49b0](https://github.com/buerokratt/Service-Module/commit/6e4b49b0) +- Merge pull request #997 from 1AhmedYasser/Hyperlinks-render-incorrectly by [@ffrose](https://www.github.com/ffrose) in [#e87f0442](https://github.com/buerokratt/Service-Module/commit/e87f0442) +- Merge pull request #983 from rootcodelabs/928/create_edit_endpoint_modal by [@Thiru Dinesh](https://www.github.com/ThiruDinesh) in [#3f0a9634](https://github.com/buerokratt/Service-Module/commit/3f0a9634) +- Merge pull request #1002 from 1AhmedYasser/Handlebars-helper-crashes-on-numeric-input by [@ffrose](https://www.github.com/ffrose) in [#d8f0a6cc](https://github.com/buerokratt/Service-Module/commit/d8f0a6cc) +- Merge pull request #998 from 1AhmedYasser/Active-files-not-removed-on-status-change by [@ffrose](https://www.github.com/ffrose) in [#74b193cb](https://github.com/buerokratt/Service-Module/commit/74b193cb) +- Fix for dynamic raw json body varibales by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e11271bc](https://github.com/buerokratt/Service-Module/commit/e11271bc) +- Merge pull request #994 from 1AhmedYasser/fix-ui-update-on-domain-selection by [@ffrose](https://www.github.com/ffrose) in [#4e073387](https://github.com/buerokratt/Service-Module/commit/4e073387) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b55be1dd](https://github.com/buerokratt/Service-Module/commit/b55be1dd) +- Path Parameter Support for API Endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#c13adf7f](https://github.com/buerokratt/Service-Module/commit/c13adf7f) +- Missed validation added by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e57cb7c3](https://github.com/buerokratt/Service-Module/commit/e57cb7c3) +- Merge branch '951/remove_public_private_endpoint_distiction' of https://github.com/rootcodelabs/Service-Module into 923/endpoint_modal_alignment by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#9cc65c2c](https://github.com/buerokratt/Service-Module/commit/9cc65c2c) +- Pull from 928 task - displar response schema by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#5a5b3633](https://github.com/buerokratt/Service-Module/commit/5a5b3633) +- Pull from 928 task - displar response schema by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#91e10523](https://github.com/buerokratt/Service-Module/commit/91e10523) +- sonar issue fixes by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#279f8460](https://github.com/buerokratt/Service-Module/commit/279f8460) +- changes related to displaying response Schema of endpoints by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1201193a](https://github.com/buerokratt/Service-Module/commit/1201193a) +- Button styling added by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#2757c938](https://github.com/buerokratt/Service-Module/commit/2757c938) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#1344c268](https://github.com/buerokratt/Service-Module/commit/1344c268) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#af3d2627](https://github.com/buerokratt/Service-Module/commit/af3d2627) +- Undo redundant changes in edpint edit flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e5edd3dc](https://github.com/buerokratt/Service-Module/commit/e5edd3dc) +- Fix in edit flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4641f2d7](https://github.com/buerokratt/Service-Module/commit/4641f2d7) +- API Endpoint Modal Alignment - implemented by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#d8fb22bc](https://github.com/buerokratt/Service-Module/commit/d8fb22bc) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 923/endpoint_modal_alignment by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#83ecb198](https://github.com/buerokratt/Service-Module/commit/83ecb198) +- Merge pull request #10 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#c861e540](https://github.com/buerokratt/Service-Module/commit/c861e540) +- Removed public/private endpoint distinction from both service flow and api registry by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#031d79d8](https://github.com/buerokratt/Service-Module/commit/031d79d8) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#443e8152](https://github.com/buerokratt/Service-Module/commit/443e8152) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#97028832](https://github.com/buerokratt/Service-Module/commit/97028832) +- GUI lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#2dec06b7](https://github.com/buerokratt/Service-Module/commit/2dec06b7) +- GUI format issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#bbd99b76](https://github.com/buerokratt/Service-Module/commit/bbd99b76) +- Issues fixed in OpenApi Edit modal by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#ac91b021](https://github.com/buerokratt/Service-Module/commit/ac91b021) +- get all endpoints for service-creation flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b9723e9a](https://github.com/buerokratt/Service-Module/commit/b9723e9a) +- Parameter mandatory option added by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#25b0385f](https://github.com/buerokratt/Service-Module/commit/25b0385f) +- OpenApi endpoint create/edit flows implemented by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#8d4e80a8](https://github.com/buerokratt/Service-Module/commit/8d4e80a8) +- Merge pull request #977 from 1AhmedYasser/Multidomain-changes by [@ffrose](https://www.github.com/ffrose) in [#9938c93a](https://github.com/buerokratt/Service-Module/commit/9938c93a) +- Custome endpoint create/edit flows implemented by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#eba6a677](https://github.com/buerokratt/Service-Module/commit/eba6a677) +- Acecess a common create/edit endpoind modal from both service flow and ApiRegistry by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#a1034640](https://github.com/buerokratt/Service-Module/commit/a1034640) +- Merge pull request #9 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4e92dca6](https://github.com/buerokratt/Service-Module/commit/4e92dca6) +- Merge pull request #973 from rootcodelabs/918/Create-API-Registry by [@ffrose](https://www.github.com/ffrose) in [#c41c2643](https://github.com/buerokratt/Service-Module/commit/c41c2643) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into 918/Create-API-Registry by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#acab68aa](https://github.com/buerokratt/Service-Module/commit/acab68aa) +- Merge pull request #8 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#68799e52](https://github.com/buerokratt/Service-Module/commit/68799e52) +- Format issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#749c7258](https://github.com/buerokratt/Service-Module/commit/749c7258) +- sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#dd42ddee](https://github.com/buerokratt/Service-Module/commit/dd42ddee) +- lint issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b581021e](https://github.com/buerokratt/Service-Module/commit/b581021e) +- Merge pull request #971 from 1AhmedYasser/Automatic-logout-not-working by [@ffrose](https://www.github.com/ffrose) in [#bdfbe3ff](https://github.com/buerokratt/Service-Module/commit/bdfbe3ff) +- Format issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#5e18a134](https://github.com/buerokratt/Service-Module/commit/5e18a134) +- Format issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#8be62ac9](https://github.com/buerokratt/Service-Module/commit/8be62ac9) +- API registry UI + backend integration - env.development updated by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#53a2dc7a](https://github.com/buerokratt/Service-Module/commit/53a2dc7a) +- API registry UI + backend integration - Part 4 by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f0f7c33e](https://github.com/buerokratt/Service-Module/commit/f0f7c33e) +- API registry UI + backend integration - Part 3 by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e50212d0](https://github.com/buerokratt/Service-Module/commit/e50212d0) +- API registry UI - issue fix in parameter elements display by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#8e021ccb](https://github.com/buerokratt/Service-Module/commit/8e021ccb) +- API registry UI - issue fix in copy flow by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#c2dc7715](https://github.com/buerokratt/Service-Module/commit/c2dc7715) +- API registry UI + backend integration - Part 2 by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#421d7bb6](https://github.com/buerokratt/Service-Module/commit/421d7bb6) +- API registry UI + backend integration - Part 1 by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#bee85ae3](https://github.com/buerokratt/Service-Module/commit/bee85ae3) +- Merge pull request #7 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#cea72f64](https://github.com/buerokratt/Service-Module/commit/cea72f64) +- Merge pull request #967 from 1AhmedYasser/Pagination-resets-after-import by [@ffrose](https://www.github.com/ffrose) in [#830fd84f](https://github.com/buerokratt/Service-Module/commit/830fd84f) +- Merge pull request #968 from 1AhmedYasser/Confirmed-service-Widget-error by [@ffrose](https://www.github.com/ffrose) in [#aee51494](https://github.com/buerokratt/Service-Module/commit/aee51494) +- Merge pull request #966 from 1AhmedYasser/Save-success-shown-before-operation-completes by [@ffrose](https://www.github.com/ffrose) in [#a8b08899](https://github.com/buerokratt/Service-Module/commit/a8b08899) +- Update services.yml by [@ffrose](https://www.github.com/ffrose) in [#6342986a](https://github.com/buerokratt/Service-Module/commit/6342986a) +- Repair imported MCQ payload references on save (#957) by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#351d7c8e](https://github.com/buerokratt/Service-Module/commit/351d7c8e) +- Fix for html link issue #932 (#955) by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#7fa937b4](https://github.com/buerokratt/Service-Module/commit/7fa937b4) +- Merge pull request #6 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#726fbdb0](https://github.com/buerokratt/Service-Module/commit/726fbdb0) +- Merge pull request #949 from rootcodelabs/fix/945/mcq_payload_index_bug by [@ffrose](https://www.github.com/ffrose) in [#43abb490](https://github.com/buerokratt/Service-Module/commit/43abb490) +- formatting issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#31900a47](https://github.com/buerokratt/Service-Module/commit/31900a47) +- Merge branch 'dev' of https://github.com/rootcodelabs/Service-Module into fix/945/mcq_payload_index_bug by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#0e70d5cf](https://github.com/buerokratt/Service-Module/commit/0e70d5cf) +- Merge pull request #5 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#3639d394](https://github.com/buerokratt/Service-Module/commit/3639d394) +- Merge pull request #948 from rootcodelabs/fix/944/mcq_nodes_button_error by [@ffrose](https://www.github.com/ffrose) in [#053f613f](https://github.com/buerokratt/Service-Module/commit/053f613f) +- Merge pull request #941 from rootcodelabs/bug-fix/933 by [@ffrose](https://www.github.com/ffrose) in [#74da82ba](https://github.com/buerokratt/Service-Module/commit/74da82ba) +- Merge pull request #942 from rootcodelabs/bug-fix/932 by [@ffrose](https://www.github.com/ffrose) in [#112275aa](https://github.com/buerokratt/Service-Module/commit/112275aa) +- Merge pull request #950 from rootcodelabs/fix/946_and_947 by [@ffrose](https://www.github.com/ffrose) in [#4d2ed49a](https://github.com/buerokratt/Service-Module/commit/4d2ed49a) +- Fix for bug #946 and #947 by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#5431d6f1](https://github.com/buerokratt/Service-Module/commit/5431d6f1) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#6cd10d97](https://github.com/buerokratt/Service-Module/commit/6cd10d97) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#22e06e94](https://github.com/buerokratt/Service-Module/commit/22e06e94) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#cf5bd2e2](https://github.com/buerokratt/Service-Module/commit/cf5bd2e2) +- Fix for bug #945 MCQ payload index bug by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#d21723de](https://github.com/buerokratt/Service-Module/commit/d21723de) +- Fix for bug #944 MCQ nodes share button state causing errors by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#e470d5f1](https://github.com/buerokratt/Service-Module/commit/e470d5f1) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#8d731e7a](https://github.com/buerokratt/Service-Module/commit/8d731e7a) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#f09a7904](https://github.com/buerokratt/Service-Module/commit/f09a7904) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#876a6313](https://github.com/buerokratt/Service-Module/commit/876a6313) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#4f72df38](https://github.com/buerokratt/Service-Module/commit/4f72df38) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#53e39eb5](https://github.com/buerokratt/Service-Module/commit/53e39eb5) +- PR sonar issues fixed by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#60dd974f](https://github.com/buerokratt/Service-Module/commit/60dd974f) +- #932 bug fix - Broken Links & HTML Artifacts in Message to Client by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#511fd4d7](https://github.com/buerokratt/Service-Module/commit/511fd4d7) +- Resolver SonarQubes issues in the PR by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#54645fcb](https://github.com/buerokratt/Service-Module/commit/54645fcb) +- fix for bug - Clear current service state on browser back button press by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#9f19ffab](https://github.com/buerokratt/Service-Module/commit/9f19ffab) +- Merge pull request #4 from buerokratt/dev by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#34325dc7](https://github.com/buerokratt/Service-Module/commit/34325dc7) +- Merge pull request #938 from rootcodelabs/bug-fix/934 by [@ffrose](https://www.github.com/ffrose) in [#445a3930](https://github.com/buerokratt/Service-Module/commit/445a3930) +- Fix for bug #934 - Intent Creation/ Update Fails with Estonian Characters by [@ruwinirathnamalala](https://www.github.com/ruwinirathnamalala) in [#b78e0662](https://github.com/buerokratt/Service-Module/commit/b78e0662) +- Merge pull request #2 from buerokratt/dev by [@Thiru Dinesh](https://www.github.com/ThiruDinesh) in [#29a770ce](https://github.com/buerokratt/Service-Module/commit/29a770ce) +- Merge pull request #929 from 1AhmedYasser/fix-blob-storage-update by [@ffrose](https://www.github.com/ffrose) in [#85e13e45](https://github.com/buerokratt/Service-Module/commit/85e13e45) +- Merge pull request #1 from buerokratt/dev by [@Thiru Dinesh](https://www.github.com/ThiruDinesh) in [#293a66a2](https://github.com/buerokratt/Service-Module/commit/293a66a2) +- Create get-active-service-by-name.sql by [@ffrose](https://www.github.com/ffrose) in [#49aba9f0](https://github.com/buerokratt/Service-Module/commit/49aba9f0) +- Merge pull request #921 from 1AhmedYasser/Endpoint-Store-Contract-Alignment by [@ffrose](https://www.github.com/ffrose) in [#b7ac5504](https://github.com/buerokratt/Service-Module/commit/b7ac5504) +- Merge pull request #901 from 1AhmedYasser/Bug-Message-to-client-does-not-support-some-special-characters by [@ffrose](https://www.github.com/ffrose) in [#f6850ad8](https://github.com/buerokratt/Service-Module/commit/f6850ad8) +- Merge pull request #915 from 1AhmedYasser/Prevent-Url-Fetch-In-Markdownify-For-Non-Image-Urls by [@ffrose](https://www.github.com/ffrose) in [#d376b7ba](https://github.com/buerokratt/Service-Module/commit/d376b7ba) +- Merge pull request #917 from 1AhmedYasser/fix-value-condition-check by [@ffrose](https://www.github.com/ffrose) in [#07286ab1](https://github.com/buerokratt/Service-Module/commit/07286ab1) +- Merge pull request #910 from 1AhmedYasser/fix-rules-drag-value by [@ffrose](https://www.github.com/ffrose) in [#be9a61be](https://github.com/buerokratt/Service-Module/commit/be9a61be) +- Merge pull request #911 from 1AhmedYasser/fix-multiline-node-break by [@ffrose](https://www.github.com/ffrose) in [#f8febddc](https://github.com/buerokratt/Service-Module/commit/f8febddc) +- Merge pull request #907 from 1AhmedYasser/Cap-canvas-text-node-height-with-wrapped-preview by [@ffrose](https://www.github.com/ffrose) in [#88fc541e](https://github.com/buerokratt/Service-Module/commit/88fc541e) +- Merge pull request #906 from 1AhmedYasser/Bug-Assign-shows-BAD-REQUEST-pills-for-valid-stat.ee by [@ffrose](https://www.github.com/ffrose) in [#57dba084](https://github.com/buerokratt/Service-Module/commit/57dba084) +- Merge pull request #903 from 1AhmedYasser/Bug-Save-stuck-with-double-warning-on-existing-service-name by [@ffrose](https://www.github.com/ffrose) in [#ac1372d5](https://github.com/buerokratt/Service-Module/commit/ac1372d5) +- Merge pull request #904 from 1AhmedYasser/Conditional-manual-values-not-cast-to-string,-comparison-fails by [@ffrose](https://www.github.com/ffrose) in [#22bb0e41](https://github.com/buerokratt/Service-Module/commit/22bb0e41) +- Merge pull request #902 from 1AhmedYasser/undo-redo-issues by [@ffrose](https://www.github.com/ffrose) in [#2821f19c](https://github.com/buerokratt/Service-Module/commit/2821f19c) +- Merge pull request #883 from 1AhmedYasser/Fix-the-download-vulnrebility by [@ffrose](https://www.github.com/ffrose) in [#38deb298](https://github.com/buerokratt/Service-Module/commit/38deb298) +- Merge pull request #885 from 1AhmedYasser/Bug-service-name-in-buttons by [@ffrose](https://www.github.com/ffrose) in [#e084e980](https://github.com/buerokratt/Service-Module/commit/e084e980) +- Merge pull request #880 from 1AhmedYasser/Hide-backoffice-system-trigger-from-end-user by [@Varmo](https://www.github.com/Varmo) in [#c2138976](https://github.com/buerokratt/Service-Module/commit/c2138976) +- Merge pull request #875 from 1AhmedYasser/Import-Bulk-Services by [@ffrose](https://www.github.com/ffrose) in [#9a573aa8](https://github.com/buerokratt/Service-Module/commit/9a573aa8) +- Merge pull request #881 from 1AhmedYasser/Refactor-Service-Module-Overview-Page by [@ffrose](https://www.github.com/ffrose) in [#79630869](https://github.com/buerokratt/Service-Module/commit/79630869) +- Merge pull request #879 from 1AhmedYasser/Show-current-version-in-GUI by [@ffrose](https://www.github.com/ffrose) in [#01c35ad3](https://github.com/buerokratt/Service-Module/commit/01c35ad3) +- Merge pull request #857 from IgorKrupenja/842-sort-focus by [@ffrose](https://www.github.com/ffrose) in [#73e15870](https://github.com/buerokratt/Service-Module/commit/73e15870) +- Merge pull request #862 from 1AhmedYasser/Ability-to-test-Buttons-in-Test-Widget by [@ffrose](https://www.github.com/ffrose) in [#d36680cc](https://github.com/buerokratt/Service-Module/commit/d36680cc) +- Merge pull request #866 from ExiRain/858-Intent-classification by [@ffrose](https://www.github.com/ffrose) in [#3fa687e8](https://github.com/buerokratt/Service-Module/commit/3fa687e8) +- Merge pull request #865 from 1AhmedYasser/Bug-API-element-does-not-send-configured-POST-body by [@ffrose](https://www.github.com/ffrose) in [#19290f11](https://github.com/buerokratt/Service-Module/commit/19290f11) +- Merge pull request #864 from 1AhmedYasser/Bulk-Export-of-Services by [@ffrose](https://www.github.com/ffrose) in [#ca81c448](https://github.com/buerokratt/Service-Module/commit/ca81c448) +- Merge pull request #867 from ExiRain/1658-logout-notification by [@ffrose](https://www.github.com/ffrose) in [#15c3d322](https://github.com/buerokratt/Service-Module/commit/15c3d322) +- Updated header to not show notification on logout by [@exiled](https://www.github.com/exiled) in [#c951cf6e](https://github.com/buerokratt/Service-Module/commit/c951cf6e) +- Updated header to not show notification on logout by [@exiled](https://www.github.com/exiled) in [#75bb7078](https://github.com/buerokratt/Service-Module/commit/75bb7078) +- Updating documentation by [@exiled](https://www.github.com/exiled) in [#446be500](https://github.com/buerokratt/Service-Module/commit/446be500) +- Updating documentation by [@exiled](https://www.github.com/exiled) in [#fe3932cc](https://github.com/buerokratt/Service-Module/commit/fe3932cc) +- Updating documentation by [@exiled](https://www.github.com/exiled) in [#9d20ed27](https://github.com/buerokratt/Service-Module/commit/9d20ed27) +- Updating documentation by [@exiled](https://www.github.com/exiled) in [#4b7f0da8](https://github.com/buerokratt/Service-Module/commit/4b7f0da8) +- Updating documentation. by [@exiled](https://www.github.com/exiled) in [#f410b5b7](https://github.com/buerokratt/Service-Module/commit/f410b5b7) +- Removed automatic services from service menu by [@exiled](https://www.github.com/exiled) in [#27087388](https://github.com/buerokratt/Service-Module/commit/27087388) +- Remvoed intent connection from service module and related configurations by [@exiled](https://www.github.com/exiled) in [#aa4c6da1](https://github.com/buerokratt/Service-Module/commit/aa4c6da1) +- Remvoed intent connection from service module and related configurations by [@exiled](https://www.github.com/exiled) in [#82e2fc69](https://github.com/buerokratt/Service-Module/commit/82e2fc69) +- Remvoed intent connection from service module by [@exiled](https://www.github.com/exiled) in [#ba4d41b7](https://github.com/buerokratt/Service-Module/commit/ba4d41b7) +- Removing intent detection by [@exiled](https://www.github.com/exiled) in [#d2b275a4](https://github.com/buerokratt/Service-Module/commit/d2b275a4) +- Merge pull request #859 from IgorKrupenja/800-indexer-azure by [@ffrose](https://www.github.com/ffrose) in [#12053862](https://github.com/buerokratt/Service-Module/commit/12053862) +- 841: Fix entering spaces in Object Editor (#855) by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#41b04b8e](https://github.com/buerokratt/Service-Module/commit/41b04b8e) +- 840: Fix escaping Object editor (#854) by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#7c10ff55](https://github.com/buerokratt/Service-Module/commit/7c10ff55) +- 837: Fix escaping in Date/Time output (#849) by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#d2e20bc3](https://github.com/buerokratt/Service-Module/commit/d2e20bc3) +- Fix: Mode-switch buttons missing after object manual edit save (#851) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#e614ce0f](https://github.com/buerokratt/Service-Module/commit/e614ce0f) +- Fix: Unsaved Changes modal shown without any edits (#852) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#6e03bcd7](https://github.com/buerokratt/Service-Module/commit/6e03bcd7) +- Automatically replace spaces in parameter names with underscores (#850) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#4b38b536](https://github.com/buerokratt/Service-Module/commit/4b38b536) +- Fix: Saving Conditional element (#848) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#d713ea1c](https://github.com/buerokratt/Service-Module/commit/d713ea1c) +- 829: Remove restriction on UPDATE/DELETE statements in SQL (#847) by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#7913f777](https://github.com/buerokratt/Service-Module/commit/7913f777) +- 798: Sync intents to Azure Blob Storage (#836) by [@Igor Krupenja](https://www.github.com/IgorKrupenja) in [#a631c05c](https://github.com/buerokratt/Service-Module/commit/a631c05c) +- Update FlowBuilder.scss (#834) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#648e728c](https://github.com/buerokratt/Service-Module/commit/648e728c) +- Special Characters Support (#832) by [@Ahmed yasser](https://www.github.com/Ahmedyasser) in [#c92245a4](https://github.com/buerokratt/Service-Module/commit/c92245a4) +- 819 move navigation (#821) by [@Vassili Moskaljov](https://www.github.com/VassiliMoskaljov) in [#3253ec0f](https://github.com/buerokratt/Service-Module/commit/3253ec0f) +- 801 saving new service configs (#815) by [@Vassili Moskaljov](https://www.github.com/VassiliMoskaljov) in [#668335ea](https://github.com/buerokratt/Service-Module/commit/668335ea) +- Merge pull request #823 from 1AhmedYasser/Bug-Redundant-multiChoiceQuestion/dynamicChoices-added-to-all-nodes-on-save by [@ffrose](https://www.github.com/ffrose) in [#9160c5e8](https://github.com/buerokratt/Service-Module/commit/9160c5e8) diff --git a/DSL/Resql/services/POST/get-navigable-services-list.sql b/DSL/Resql/services/POST/get-navigable-services-list.sql new file mode 100644 index 000000000..02a3fe9bc --- /dev/null +++ b/DSL/Resql/services/POST/get-navigable-services-list.sql @@ -0,0 +1,11 @@ + +SELECT service_id, name +FROM ( + SELECT DISTINCT ON (service_id) service_id, name, current_state + FROM services + WHERE NOT deleted + AND is_common = false + ORDER BY service_id, id DESC +) latest +WHERE current_state IN ('active', 'ready', 'draft') +ORDER BY name ASC; diff --git a/DSL/Resql/services/POST/get-service-status-by-name.sql b/DSL/Resql/services/POST/get-service-status-by-name.sql new file mode 100644 index 000000000..b7cf48e93 --- /dev/null +++ b/DSL/Resql/services/POST/get-service-status-by-name.sql @@ -0,0 +1,6 @@ +SELECT current_state +FROM services +WHERE name = :service_name + AND NOT deleted +ORDER BY id DESC +LIMIT 1; diff --git a/DSL/Resql/services/POST/get-services-list.sql b/DSL/Resql/services/POST/get-services-list.sql index d1a44856f..903bceedc 100644 --- a/DSL/Resql/services/POST/get-services-list.sql +++ b/DSL/Resql/services/POST/get-services-list.sql @@ -5,10 +5,11 @@ SELECT current_state AS state, ruuter_type AS type, slot, - CEIL((SELECT COUNT(DISTINCT service_id) FROM services WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN)) / :page_size::DECIMAL) AS total_pages + CEIL((SELECT COUNT(DISTINCT service_id) FROM services WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN) AND (:search IS NULL OR :search = '' OR LOWER(name) LIKE LOWER('%' || :search || '%'))) / :page_size::DECIMAL) AS total_pages FROM services -WHERE NOT deleted +WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN) + AND (:search IS NULL OR :search = '' OR LOWER(name) LIKE LOWER('%' || :search || '%')) ORDER BY CASE WHEN :sorting = 'name asc' THEN name END ASC, CASE WHEN :sorting = 'name desc' THEN name END DESC, diff --git a/DSL/Resql/training/GET/empty.sql b/DSL/Resql/training/GET/empty.sql new file mode 100644 index 000000000..531c7647c --- /dev/null +++ b/DSL/Resql/training/GET/empty.sql @@ -0,0 +1,2 @@ +-- This is a empty sql for Buerokratt DSL delivery method +SELECT current_date; diff --git a/DSL/Resql/training/POST/get-new-nonce.sql b/DSL/Resql/training/POST/get-new-nonce.sql new file mode 100644 index 000000000..c5643a86f --- /dev/null +++ b/DSL/Resql/training/POST/get-new-nonce.sql @@ -0,0 +1 @@ +INSERT INTO request_nonces (valid_until) VALUES ( now() + interval '1 day') RETURNING nonce; diff --git a/DSL/Resql/training/POST/use-nonce.sql b/DSL/Resql/training/POST/use-nonce.sql new file mode 100644 index 000000000..52fd662e0 --- /dev/null +++ b/DSL/Resql/training/POST/use-nonce.sql @@ -0,0 +1 @@ +update request_nonces set used_at = now() where nonce = :updated_nonce and used_at is null returning nonce; diff --git a/DSL/Ruuter/services/GET/get-new-nonce.yml b/DSL/Ruuter/services/GET/get-new-nonce.yml new file mode 100644 index 000000000..b37fb6a2f --- /dev/null +++ b/DSL/Ruuter/services/GET/get-new-nonce.yml @@ -0,0 +1,19 @@ +declaration: + call: declare + version: 0.1 + description: "Description placeholder for 'GET-NEW-NONCE'" + method: get + accepts: json + returns: json + namespace: service + +get_new_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/get-new-nonce" + result: nonce_res + +return_result: + wrapper: false + return: ${nonce_res.response.body[0].nonce} + next: end diff --git a/DSL/Ruuter/services/GET/navigable-services.yml b/DSL/Ruuter/services/GET/navigable-services.yml new file mode 100644 index 000000000..e1ae7a47b --- /dev/null +++ b/DSL/Ruuter/services/GET/navigable-services.yml @@ -0,0 +1,20 @@ +declaration: + call: declare + version: 0.1 + description: "Decription placeholder for 'NAVIGABLE-SERVICES'" + method: get + accepts: json + returns: json + namespace: service + +get_services_list: + call: http.post + args: + url: "[#SERVICE_RESQL]/get-navigable-services-list" + result: results + +return_ok: + status: 200 + wrapper: false + return: ${results.response.body} + next: end diff --git a/DSL/Ruuter/services/GET/services/active/.guard b/DSL/Ruuter/services/GET/services/active/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/GET/services/active/.guard +++ b/DSL/Ruuter/services/GET/services/active/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/GET/services/draft/.guard b/DSL/Ruuter/services/GET/services/draft/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/GET/services/draft/.guard +++ b/DSL/Ruuter/services/GET/services/draft/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/GET/services/inactive/.guard b/DSL/Ruuter/services/GET/services/inactive/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/GET/services/inactive/.guard +++ b/DSL/Ruuter/services/GET/services/inactive/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/POST/services.yml b/DSL/Ruuter/services/POST/services.yml index b54d47af0..fb971f1a6 100644 --- a/DSL/Ruuter/services/POST/services.yml +++ b/DSL/Ruuter/services/POST/services.yml @@ -19,7 +19,10 @@ declaration: description: "Body field 'sorting'" - field: is_common type: boolean - description: "Body field 'is_common'" + description: "Body field 'is_common'" + - field: search + type: string + description: "Body field 'search'" get_services_list: call: http.post @@ -30,6 +33,7 @@ get_services_list: page_size: ${incoming.body.page_size} sorting: ${incoming.body.sorting} is_common: ${incoming.body.is_common} + search: ${incoming.body.search} limit: 600 result: services_res diff --git a/DSL/Ruuter/services/POST/services/active/.guard b/DSL/Ruuter/services/POST/services/active/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/POST/services/active/.guard +++ b/DSL/Ruuter/services/POST/services/active/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/POST/services/add.yml b/DSL/Ruuter/services/POST/services/add.yml index a9a81ec44..07c76c5c0 100644 --- a/DSL/Ruuter/services/POST/services/add.yml +++ b/DSL/Ruuter/services/POST/services/add.yml @@ -112,7 +112,7 @@ delete_all_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/draft" - keyword: "${name}_" + keyword: "${name}_mcq_" result: deleteRes convert_json_content_to_yml: diff --git a/DSL/Ruuter/services/POST/services/delete.yml b/DSL/Ruuter/services/POST/services/delete.yml index c9a7bef54..7bb8c60ef 100644 --- a/DSL/Ruuter/services/POST/services/delete.yml +++ b/DSL/Ruuter/services/POST/services/delete.yml @@ -130,7 +130,7 @@ delete_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" - keyword: "${name_res.response.body[0].name}_" + keyword: "${name_res.response.body[0].name}_mcq_" result: deleted_mcq return_ok: diff --git a/DSL/Ruuter/services/POST/services/draft/.guard b/DSL/Ruuter/services/POST/services/draft/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/POST/services/draft/.guard +++ b/DSL/Ruuter/services/POST/services/draft/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/POST/services/edit.yml b/DSL/Ruuter/services/POST/services/edit.yml index 368be5fff..6e1299051 100644 --- a/DSL/Ruuter/services/POST/services/edit.yml +++ b/DSL/Ruuter/services/POST/services/edit.yml @@ -103,7 +103,7 @@ delete_old_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/active" - keyword: "${get_service_result.response.body[0].name}_" + keyword: "${get_service_result.response.body[0].name}_mcq_" result: deleteOldRes next: delete_all_mcq_files @@ -113,7 +113,7 @@ delete_all_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/active" - keyword: "${name}_" + keyword: "${name}_mcq_" result: deleteRes next: check_for_content @@ -267,15 +267,21 @@ check for_state: check_remove_blob_then_draft: switch: - condition: ${old_state === 'active'} - next: delete_from_storage_edit + next: check_if_azure_storage_is_enabled_before_delete_edit next: change_state_to_draft check_remove_blob_then_ok: switch: - condition: ${old_state === 'active'} - next: delete_from_storage_edit + next: check_if_azure_storage_is_enabled_before_delete_edit next: return_ok +check_if_azure_storage_is_enabled_before_delete_edit: + switch: + - condition: ${[#AZURE_STORAGE_ENABLED] === true} + next: delete_from_storage_edit + next: after_delete_from_storage_edit + delete_from_storage_edit: call: http.delete args: @@ -359,7 +365,13 @@ generate_service_json: examples: ${service_data_result.response.body[0].examples} entities: ${service_data_result.response.body[0].entities} result: service_json_result - next: replace_in_storage + next: check_if_azure_storage_is_enabled + +check_if_azure_storage_is_enabled: + switch: + - condition: ${[#AZURE_STORAGE_ENABLED] === true} + next: replace_in_storage + next: return_ok replace_in_storage: call: http.post diff --git a/DSL/Ruuter/services/POST/services/inactive/.guard b/DSL/Ruuter/services/POST/services/inactive/.guard index 644353775..9e768b6bc 100644 --- a/DSL/Ruuter/services/POST/services/inactive/.guard +++ b/DSL/Ruuter/services/POST/services/inactive/.guard @@ -1,4 +1,61 @@ -guard_allow_all: +process_request: + switch: + - condition: ${ incoming.headers['x-ruuter-nonce'] != null } + next: verify_header_nonce + - condition: ${ incoming.params['ruuter-nonce'] != null } + next: verify_param_nonce + - condition: ${incoming.headers == null || incoming.headers.cookie == null} + next: guard_fail + next: authenticate + +verify_header_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.headers['x-ruuter-nonce']} + result: nonce_response + next: check_inline + +verify_param_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/use-nonce" + body: + updated_nonce: ${incoming.params['ruuter-nonce']} + result: nonce_response + next: check_inline + +check_inline: + inline: extAuth + result: extauth + +check_nonce: + switch: + - condition: ${ !extauth || (nonce_response.response.body[0] == null) } + next: guard_fail + next: guard_success + +authenticate: + template: "[#SERVICE_PROJECT_LAYER]/check-user-authority" + requestType: templates + headers: + cookie: ${incoming.headers.cookie} + result: authority_result + next: check_authority_result + +check_authority_result: + switch: + - condition: ${authority_result !== "false"} + next: guard_success + next: guard_fail + +guard_success: return: "success" status: 200 next: end + +guard_fail: + return: "unauthorized" + status: 401 + next: end diff --git a/DSL/Ruuter/services/POST/services/status.yml b/DSL/Ruuter/services/POST/services/status.yml index c1c5c0d8b..a44745809 100644 --- a/DSL/Ruuter/services/POST/services/status.yml +++ b/DSL/Ruuter/services/POST/services/status.yml @@ -149,7 +149,13 @@ generate_service_json: examples: ${service_data_result.response.body[0].examples} entities: ${service_data_result.response.body[0].entities} result: service_json_result - next: create_in_storage + next: check_if_azure_storage_is_enabled + +check_if_azure_storage_is_enabled: + switch: + - condition: ${[#AZURE_STORAGE_ENABLED] === true} + next: create_in_storage + next: activate_all_mcq_services create_in_storage: call: http.post @@ -191,7 +197,7 @@ activate_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/active" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "yml" result: active_move_results next: return_ok @@ -204,7 +210,13 @@ deactivate_service: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}/${name + old_file_end}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/inactive/${name}.tmp" result: deactivate_service_result - next: delete_from_storage + next: check_if_azure_storage_is_enabled_before_delete + +check_if_azure_storage_is_enabled_before_delete: + switch: + - condition: ${[#AZURE_STORAGE_ENABLED] === true} + next: delete_from_storage + next: dactivate_all_mcq_services delete_from_storage: call: http.delete @@ -245,7 +257,7 @@ dactivate_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/inactive" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "tmp" result: inactive_move_results next: return_ok @@ -267,7 +279,7 @@ draft_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/draft" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "tmp" result: inactive_move_results next: return_ok diff --git a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml index 795bb5383..46e268c8e 100644 --- a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml +++ b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml @@ -8,6 +8,12 @@ declaration: namespace: service allowlist: body: + - field: chatId + type: string + description: "The chat ID for the message" + - field: authorId + type: string + description: "The author ID for the message" - field: serviceName type: string description: "Name of the target active service to trigger" @@ -19,13 +25,38 @@ check_for_body: switch: - condition: ${incoming.body == null || incoming.body.serviceName == null || incoming.body.serviceName == ""} next: missing_service_name + next: get_service_status + +get_service_status: + call: http.post + args: + url: "[#SERVICE_RESQL]/get-service-status-by-name" + body: + service_name: ${incoming.body.serviceName} + result: service_status_res + next: assign_service_status + +assign_service_status: + assign: + service_status: "${service_status_res.response.body[0] && service_status_res.response.body[0].currentState === 'active' ? 'active' : 'draft'}" + next: get_new_nonce + +get_new_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/get-new-nonce" + result: nonce_res next: trigger_service trigger_service: call: http.post args: - url: "[#SERVICE_RUUTER]/services/active/${incoming.body.serviceName}" - body: + url: "[#SERVICE_RUUTER]/services/${service_status}/${incoming.body.serviceName}" + headers: + x-ruuter-nonce: ${nonce_res.response.body[0].nonce} + body: + chatId: ${incoming.body.chatId} + authorId: ${incoming.body.authorId} input: ${incoming.body.input} result: trigger_result diff --git a/GUI/.env.development b/GUI/.env.development index 9083877f1..f01546aad 100644 --- a/GUI/.env.development +++ b/GUI/.env.development @@ -33,4 +33,4 @@ REACT_APP_INTENT_CREATION_PATH=http://localhost:3001/training/training/intents REACT_APP_MULTI_CHOICE_QUESTION_MAX_BUTTONS=4 REACT_APP_ENABLE_MULTI_DOMAIN=FALSE REACT_APP_CURRENT_VERSION=Version 1.0.0 -REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"API varamu","en":"API Registry"},"path":"/api-registry"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] +REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"API varamu","en":"API Registry"},"path":"/api-registry"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"knowledge-center","label":{"et":"Teadmuskeskus","en":"Knowledge Center"},"path":"/knowledge-center","children":[{"id":"rag-search","label":{"et":"Mudelid ja seadistused","en":"Models management"},"path":"/rag-search","children":[{"label":{"et":"Mudelite ühendused","en":"LLM connections"},"path":"/rag-search/llm-connections"},{"label":{"et":"Viiba Seaded","en":"Prompt Configurations"},"path":"/rag-search/prompt-configurations"},{"label":{"et":"Testi mudelit","en":"Test LLM"},"path":"/rag-search/test-llm"}]},{"id":"ckb","label":{"et":"Teadmusbaas","en":"Knowledge Base"},"path":"/ckb","children":[{"label":{"et":"Agentuur","en":"Agency"},"path":"/ckb/agency"},{"label":{"et":"Aruanded","en":"Reports"},"path":"/ckb/reports"},{"label":{"et":"API Integratsioonid","en":"API Integrations"},"path":"/ckb/api"}]}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] diff --git a/GUI/package-lock.json b/GUI/package-lock.json index c297dfd24..d548b3eb4 100644 --- a/GUI/package-lock.json +++ b/GUI/package-lock.json @@ -8,8 +8,8 @@ "name": "servicemodule", "version": "0.1.0", "dependencies": { - "@buerokratt-ria/header": "^0.1.52", - "@buerokratt-ria/menu": "^0.2.13", + "@buerokratt-ria/header": "^0.1.53", + "@buerokratt-ria/menu": "^0.2.15", "@buerokratt-ria/styles": "^0.0.1", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", @@ -56,11 +56,11 @@ "react-idle-timer": "^5.7.2", "react-json-tree": "^0.20.0", "react-loading-indicators": "^1.0.1", - "react-quill": "^2.0.0", + "react-quill-new": "^3.8.3", "react-router-dom": "^6.6.2", "react-textarea-autosize": "^8.4.0", "rxjs": "^7.8.0", - "sanitize-html": "^2.17.0", + "sanitize-html": "^2.17.6", "sass": "^1.57.1", "sass-loader": "^13.2.0", "to-json-schema": "^0.2.5", @@ -82,7 +82,7 @@ "@types/react": "^18.2.0", "@types/react-datepicker": "^4.8.0", "@types/react-dom": "^18.2.0", - "@types/sanitize-html": "^2.16.0", + "@types/sanitize-html": "^2.16.1", "@types/to-json-schema": "^0.2.1", "@types/uuid": "^9.0.1", "@vitejs/plugin-react": "^5.1.1", @@ -204,13 +204,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -476,12 +476,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "dependencies": { - "@babel/types": "^7.29.7" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -1040,15 +1040,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", - "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" + "@babel/traverse": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1294,9 +1294,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", - "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" @@ -1355,9 +1355,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", - "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", @@ -1600,17 +1600,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", + "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", + "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -1618,9 +1618,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -1640,9 +1640,9 @@ } }, "node_modules/@buerokratt-ria/header": { - "version": "0.1.52", - "resolved": "https://registry.npmjs.org/@buerokratt-ria/header/-/header-0.1.52.tgz", - "integrity": "sha512-4k9Ekym6UqQpyF2nEIIT0n3wdp6Ax9sTvWK4HeZ7xuwf9YdgYnYRARRnZxcfsJCMm54JUQ8IKV9Y5i5ULVk1Bg==", + "version": "0.1.53", + "resolved": "https://registry.npmjs.org/@buerokratt-ria/header/-/header-0.1.53.tgz", + "integrity": "sha512-dAOBhWwz8l9dLgWlSMSEUfmX+lub2JVlFIjMp7HZYg3iKuU+VWmpgfaxe4TMUeNnCR50YCXulyyn8seO6YMIoQ==", "dependencies": { "@buerokratt-ria/styles": "^0.0.1", "@types/react": "^18.2.21", @@ -1679,9 +1679,9 @@ } }, "node_modules/@buerokratt-ria/menu": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@buerokratt-ria/menu/-/menu-0.2.13.tgz", - "integrity": "sha512-RdEwtb/ImeXScbe5Kd8GlECHgySLnDhJsIEobm9081uu0ISCpGGdGM6/V5NZQsEjOqpTEHjIYFlEOBJYC9+UoA==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/@buerokratt-ria/menu/-/menu-0.2.15.tgz", + "integrity": "sha512-xtjIyD/3Mdg2UZ7A6Yv/3ZsZX8LGUFGpYtr3LaYeyfhv5FsLWfDwXNPL2ViooOdpPJaD4hmKURrBF2VgpmBfUw==", "dependencies": { "@buerokratt-ria/styles": "^0.0.1", "@types/react": "^18.2.21", @@ -2306,9 +2306,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -2383,9 +2383,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "dependencies": { "ajv": "^6.14.0", @@ -2394,7 +2394,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, @@ -2440,9 +2440,9 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2474,28 +2474,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", + "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", "dependencies": { - "@floating-ui/dom": "^1.7.6" + "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -2503,9 +2503,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==" + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==" }, "node_modules/@fontsource/roboto": { "version": "4.5.8", @@ -2690,17 +2690,33 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", "hasInstallScript": true, "optional": true, "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">= 10.0.0" @@ -2710,25 +2726,24 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", "cpu": [ "arm64" ], @@ -2745,9 +2760,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", "cpu": [ "arm64" ], @@ -2764,9 +2779,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", "cpu": [ "x64" ], @@ -2783,9 +2798,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", "cpu": [ "x64" ], @@ -2802,9 +2817,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", "cpu": [ "arm" ], @@ -2821,9 +2836,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", "cpu": [ "arm" ], @@ -2840,9 +2855,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", "cpu": [ "arm64" ], @@ -2859,9 +2874,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", "cpu": [ "arm64" ], @@ -2878,9 +2893,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", "cpu": [ "x64" ], @@ -2897,9 +2912,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", "cpu": [ "x64" ], @@ -2916,9 +2931,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", "cpu": [ "arm64" ], @@ -2934,29 +2949,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", "cpu": [ "x64" ], @@ -3010,21 +3006,21 @@ } }, "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.3.tgz", + "integrity": "sha512-Road2bidD0uu/1BGDOWNdPI06g0lIRy6IF9GZcIrDK2KGItfor8IQwQa+yM2ERgHM1MmHxaxpTzk0/Jp42lNfA==" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==" + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz", + "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==" }, "node_modules/@radix-ui/react-accessible-icon": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz", - "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.15.tgz", + "integrity": "sha512-WTQwcAvQf5sOcuUyi90lKPbhwcvQ+j55cjrSmeaN+L2vKU3DooOvlKw2MDeiJ5IkV5N905KW0/fGojKOBhD11A==", "dependencies": { - "@radix-ui/react-visually-hidden": "1.2.3" + "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", @@ -3042,19 +3038,19 @@ } }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", - "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "version": "1.2.20", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.20.tgz", + "integrity": "sha512-jDhG9FvAEnlhnjrsINbNXcUa4G+L1KqSkJSunkbKEzFRcAb52jvM0PjPxPRvhe1HNc5F5yc0yzzWeeqlH4yBIg==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collapsible": "1.1.20", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -3072,16 +3068,15 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", - "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.23.tgz", + "integrity": "sha512-VAYOiQRqj3GPpYJE0I9J+X8Ip05cyVlNdKOFeiGS2Ou1HHGfpl0BxOyZm6nmVDyU+W+NF3/XLzmjHmVGydhwgA==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dialog": "1.1.23", + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3099,11 +3094,11 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.15.tgz", + "integrity": "sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3121,11 +3116,11 @@ } }, "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", - "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.15.tgz", + "integrity": "sha512-fy+dyVR+90nelK8rqIznFlxzx7uPcGbhxH8Nfr2bHb4UfSe+e3hklOC0luK0hDwVwnRX7xTRySpsrQVeW+/oNQ==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3143,15 +3138,16 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", - "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.6.tgz", + "integrity": "sha512-4ULOTJ/mqy2hT9GlWa/MFHxHSvH3nJzHnZM1waNsc5Bonv7i70aNenghXmD97S6OJ81ekXONGGt4nT1r0PfEdA==", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3169,18 +3165,17 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", - "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.11.tgz", + "integrity": "sha512-Gnptr9pDDQxD3hgq2dtPbtrp/c2qH1mBwIzw3X/ivrMb2e1t0jMTi606fVEqFPaQR1ggXIVQWKj3P2WW9v7zGQ==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3198,18 +3193,18 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.20.tgz", + "integrity": "sha512-mcGesGplBnzN2sbvJETzpCNfSMyPnb29q1GRLU+Ib7bJrpIG2ywmRoh2V5VbA2uNvKikKUlVbAPks7JDjz4A8Q==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3227,14 +3222,14 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.15.tgz", + "integrity": "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", @@ -3252,9 +3247,9 @@ } }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz", + "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3266,9 +3261,9 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz", + "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3280,16 +3275,15 @@ } }, "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", - "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.7.tgz", + "integrity": "sha512-CtXP35dxaB5T3zXSd+E3uHe/QpXcpYnZmxp6OaIbfthtfW4wyb77M23BG+bwIJDtsMwEP/YssdsmNyZu7jhWew==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-menu": "2.1.24", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -3307,24 +3301,25 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.23.tgz", + "integrity": "sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-focus-guards": "1.1.6", + "@radix-ui/react-focus-scope": "1.1.16", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -3342,9 +3337,9 @@ } }, "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.4.tgz", + "integrity": "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3356,15 +3351,15 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.19.tgz", + "integrity": "sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-effect-event": "0.0.5" }, "peerDependencies": { "@types/react": "*", @@ -3382,17 +3377,17 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.24.tgz", + "integrity": "sha512-geq8l2rJkxvkXsT9RMgtUE3P8pITFpTsvYpbySi1IH4fZEABD/Gp85myayFgxk0ktljGMJnCbeFkyTusvSvv7g==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-menu": "2.1.24", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -3410,9 +3405,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.6.tgz", + "integrity": "sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3424,13 +3419,13 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.16.tgz", + "integrity": "sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ==", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3448,16 +3443,16 @@ } }, "node_modules/@radix-ui/react-form": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz", - "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==", + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.16.tgz", + "integrity": "sha512-Q4TLEn2A7TAypxwmd6R9EwrlXDvkfYSDMrq9/887AXAGh+G1rH+kYJKSTv+Si9Y0JPKTwKYv6PviAJosysNimA==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-label": "2.1.7", - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-label": "2.1.15", + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3475,19 +3470,19 @@ } }, "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", - "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.23.tgz", + "integrity": "sha512-H8qONfZd3ltrU3+jHCIgITbWo6e1iTKvP9DHdrvYbX48ooRM5FjEDTn16AMwdfuOGkWdZEhpl3PLL/Wk/AnHDQ==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -3505,11 +3500,11 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz", + "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3522,11 +3517,11 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.15.tgz", + "integrity": "sha512-o/rdYEwZTTo5tjknnPeyQFU45kUC4i/XyeDPP+HGyi6XqpOP6Zf5Ya5vh/Yfe9Id5JiuWnnAx2XqIeD3UYZt0g==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3544,28 +3539,28 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.24.tgz", + "integrity": "sha512-uW7RVuU6Lp/ZtfeY4b3kL32zccgEWvPv1+cf17ubYzHa9cL8AHokmk36cG/XEiH/smbQvumnieXX9j/e9RqJWA==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-focus-guards": "1.1.6", + "@radix-ui/react-focus-scope": "1.1.16", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-use-callback-ref": "1.1.4", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -3583,20 +3578,20 @@ } }, "node_modules/@radix-ui/react-menubar": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", - "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.24.tgz", + "integrity": "sha512-eeVs0vf7cuqXaM0qLQCPcufImiJNVBXdJDLu7ZGYl2732UH23Qat/foNGrr6vYV3/DdTsBqASoggUFgH14OcZA==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-menu": "2.1.24", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -3614,24 +3609,24 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", - "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.22", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.22.tgz", + "integrity": "sha512-ou7iLEJ+yrhQndkkA4U21XIdS/CS45F4iXIkTZcb6/Ne9EMsOuDudVmCwmDnfFZZ+y1FZqXRNSIgBy+YMvZVZg==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-use-previous": "1.1.4", + "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", @@ -3649,22 +3644,22 @@ } }, "node_modules/@radix-ui/react-one-time-password-field": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz", - "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.16.tgz", + "integrity": "sha512-Tj9P6ntAJEw52oq/F0AGknXR4XncxEt7XU47O3xJQOiWfLzEy3d9gtgKfvjSzGxzHkfL+VzvxGu2KTFsloJqXw==", + "dependencies": { + "@radix-ui/number": "1.1.3", + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3682,18 +3677,18 @@ } }, "node_modules/@radix-ui/react-password-toggle-field": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz", - "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.11.tgz", + "integrity": "sha512-4gvFnmDXu3dgj21CqsufzIameRvlRd4SBqaWhcrlrNhRo0Y5i/49AmRJYe1fdAM3G2VNBbmin4b0D6cdQocwgw==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-is-hydrated": "0.1.0" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-is-hydrated": "0.1.3" }, "peerDependencies": { "@types/react": "*", @@ -3711,25 +3706,25 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.23.tgz", + "integrity": "sha512-mw58MrBlyHWFisTOYignD0vf/3gdcgAR+9of1s9G/38CbFiUwH1nCDkc0AUM9IrXFgN5Ue8n45j9WCgyM1sbiQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-focus-guards": "1.1.6", + "@radix-ui/react-focus-scope": "1.1.16", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-use-controllable-state": "1.2.6", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -3747,20 +3742,20 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.7.tgz", + "integrity": "sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==", "dependencies": { "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" + "@radix-ui/react-arrow": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-use-rect": "1.1.4", + "@radix-ui/react-use-size": "1.1.4", + "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", @@ -3778,12 +3773,12 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.17.tgz", + "integrity": "sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3801,12 +3796,11 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.10.tgz", + "integrity": "sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3824,11 +3818,11 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.10.tgz", + "integrity": "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", @@ -3846,12 +3840,12 @@ } }, "node_modules/@radix-ui/react-progress": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", - "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.16.tgz", + "integrity": "sha512-5XnomAsoZZCY+KNTxbIghpGqPruZvKFNlvcAljVAOdDRDsH4/OZQxhtwo5wdtoDM5R6MhJBb2sPnDuRFep3lzg==", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -3869,20 +3863,19 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", - "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.7.tgz", + "integrity": "sha512-cgYFEkntCxppHZgtSZ+7vh0wbZQ+IC7PPMw8DSnRG27B6kDd32/Zw0OJt7dGDigCoprMuWHjg2PvUn3PYvPFoQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3900,19 +3893,21 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.19.tgz", + "integrity": "sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3930,19 +3925,19 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "version": "1.2.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.18.tgz", + "integrity": "sha512-Zn5Cd171wxsO3Dfg8HaW6RifTb9CYTKQJHs/G4+LN1GfmJpaQMZQyQxMprVPHpaz7QY4l9BxK2JwQuzHsXC8nA==", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/number": "1.1.3", + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3960,31 +3955,32 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.7.tgz", + "integrity": "sha512-WFGImkmbzcfxeIwq/+4HvRN0pizBwbwQUED4I13ezQsDdfl38ZntN6TmR8XaSzPBqoCToe8rF75j6NPNDSzhbg==", + "dependencies": { + "@radix-ui/number": "1.1.3", + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-focus-guards": "1.1.6", + "@radix-ui/react-focus-scope": "1.1.16", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-use-previous": "1.1.4", + "@radix-ui/react-visually-hidden": "1.2.11", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -4002,11 +3998,11 @@ } }, "node_modules/@radix-ui/react-separator": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", - "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.15.tgz", + "integrity": "sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -4024,21 +4020,21 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.7.tgz", + "integrity": "sha512-mTSLf1GC/C0moWjTbvCM6Qn/gBjvlFt1azuWF2v7MN5C3Zq2U2J2lN3ZEYkpujuOU5Ro7A28wkviSxaKnG0BYg==", + "dependencies": { + "@radix-ui/number": "1.1.3", + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-use-previous": "1.1.4", + "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4056,11 +4052,11 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.3.tgz", + "integrity": "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", @@ -4073,17 +4069,16 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.7.tgz", + "integrity": "sha512-48tB/4dn2UVLBCYhTu9AuR63IHl73l/qLbLgxd86noTUor4/K4LFDAcYjK+isP5313qxaFpjPVogE7+Y0/V3Kw==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4101,18 +4096,18 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.21.tgz", + "integrity": "sha512-UKxJlZid7FVtsk/WTxj4i4uSEgj2Au+KBbS7SQyTlzMhhn+86Cz3tISZdTa87bfEfcuvZezf2ZsxD4xuEKtkog==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -4130,22 +4125,22 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", - "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.23", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.23.tgz", + "integrity": "sha512-ofhyAsYaocRGOs/n0XWdUOSVzEAG6BfrMVM8z0c0kLEWY38w/0WuMFPTJP/HVaZPYkMvHZoKIIhNcjbTCBILPg==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", @@ -4163,13 +4158,13 @@ } }, "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.18.tgz", + "integrity": "sha512-7lonPlKfSacd20GlOBx2ltuVKz9oqWYZz+oMQyOltw6t1y2nyftj2ZmwwUHYn49kqfDWcp8dNZm5NgV+5Z+mug==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -4187,17 +4182,17 @@ } }, "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.19.tgz", + "integrity": "sha512-OtnwuSVjd1Ofi+AdnvhsjQdyuhCDwYs1w9RyB5BN/OavXOVQo42SYqQjwUnbPnaiPFBpQ9aX70dWeee+v2oBLA==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-toggle": "1.1.18", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -4215,17 +4210,17 @@ } }, "node_modules/@radix-ui/react-toolbar": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz", - "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.19.tgz", + "integrity": "sha512-Ph0IvtYw4VB12ZnZg+YtrGs8yJQsnizwo/zu0R4Y/nWugtJzA7Pg1eWeuDR9+LSqn+xjamss+UOSOJJJ4gx8jw==", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-separator": "1.1.7", - "@radix-ui/react-toggle-group": "1.1.11" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-separator": "1.1.15", + "@radix-ui/react-toggle-group": "1.1.19" }, "peerDependencies": { "@types/react": "*", @@ -4243,22 +4238,23 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.16.tgz", + "integrity": "sha512-6EamKFRRnlpdadndbZ6LMwycfwkwPte1B42hs6QA0gYhjaOKqW4PZ4pjaW9UrlDX5eVt/OjncE7BFTPL5nmZhg==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", @@ -4276,9 +4272,9 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz", + "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4290,12 +4286,13 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.6.tgz", + "integrity": "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==", "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4308,11 +4305,11 @@ } }, "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.5.tgz", + "integrity": "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4325,11 +4322,11 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.5.tgz", + "integrity": "sha512-ge3ipobwSXTj4JyVtswQ7qZj0ZHdtbGuOno/LrgAAeSxtsJ6Vs4Gz5IkPH2bmqpjcLUFoqGhA/mueuIf63UXlA==", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4342,12 +4339,9 @@ } }, "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", - "dependencies": { - "use-sync-external-store": "^1.5.0" - }, + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", + "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4359,9 +4353,9 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4373,9 +4367,9 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.4.tgz", + "integrity": "sha512-XoSLhbRbqxFtgJoi2fNHA3C6pDlY34x508vUpUGoFZfvePfHXHbE1lC4FYFMnJWgiCRroSTw6fOsXQoVS9RwZg==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4387,11 +4381,11 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.4.tgz", + "integrity": "sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==", "dependencies": { - "@radix-ui/rect": "1.1.1" + "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", @@ -4404,11 +4398,11 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.4.tgz", + "integrity": "sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4421,11 +4415,11 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.11.tgz", + "integrity": "sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ==", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -4443,9 +4437,9 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.3.tgz", + "integrity": "sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==" }, "node_modules/@react-dnd/asap": { "version": "5.0.2", @@ -4540,9 +4534,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.0.tgz", - "integrity": "sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", "cpu": [ "arm" ], @@ -4553,9 +4547,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.0.tgz", - "integrity": "sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", "cpu": [ "arm64" ], @@ -4566,9 +4560,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.0.tgz", - "integrity": "sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", "cpu": [ "arm64" ], @@ -4579,9 +4573,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.0.tgz", - "integrity": "sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", "cpu": [ "x64" ], @@ -4592,9 +4586,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.0.tgz", - "integrity": "sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", "cpu": [ "arm64" ], @@ -4605,9 +4599,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.0.tgz", - "integrity": "sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", "cpu": [ "x64" ], @@ -4618,9 +4612,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.0.tgz", - "integrity": "sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", "cpu": [ "arm" ], @@ -4631,9 +4625,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.0.tgz", - "integrity": "sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", "cpu": [ "arm" ], @@ -4644,9 +4638,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.0.tgz", - "integrity": "sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", "cpu": [ "arm64" ], @@ -4657,9 +4651,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.0.tgz", - "integrity": "sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", "cpu": [ "arm64" ], @@ -4670,9 +4664,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.0.tgz", - "integrity": "sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", "cpu": [ "loong64" ], @@ -4683,9 +4677,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.0.tgz", - "integrity": "sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", "cpu": [ "loong64" ], @@ -4696,9 +4690,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.0.tgz", - "integrity": "sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", "cpu": [ "ppc64" ], @@ -4709,9 +4703,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.0.tgz", - "integrity": "sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", "cpu": [ "ppc64" ], @@ -4722,9 +4716,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.0.tgz", - "integrity": "sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", "cpu": [ "riscv64" ], @@ -4735,9 +4729,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.0.tgz", - "integrity": "sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", "cpu": [ "riscv64" ], @@ -4748,9 +4742,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.0.tgz", - "integrity": "sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", "cpu": [ "s390x" ], @@ -4761,9 +4755,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.0.tgz", - "integrity": "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", "cpu": [ "x64" ], @@ -4774,9 +4768,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.0.tgz", - "integrity": "sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", "cpu": [ "x64" ], @@ -4787,9 +4781,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.0.tgz", - "integrity": "sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", "cpu": [ "x64" ], @@ -4800,9 +4794,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.0.tgz", - "integrity": "sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", "cpu": [ "arm64" ], @@ -4813,9 +4807,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.0.tgz", - "integrity": "sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", "cpu": [ "arm64" ], @@ -4826,9 +4820,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.0.tgz", - "integrity": "sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", "cpu": [ "ia32" ], @@ -4839,9 +4833,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.0.tgz", - "integrity": "sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", "cpu": [ "x64" ], @@ -4852,9 +4846,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.0.tgz", - "integrity": "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", "cpu": [ "x64" ], @@ -5253,9 +5247,9 @@ } }, "node_modules/@testing-library/user-event": { - "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "version": "14.6.4", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.4.tgz", + "integrity": "sha512-QCGwP6QrjypBLwyj5cuyfVamkaIEy/XGY+1VDehbtbQqOggYmTFpFOdWR5mPz14vX8vXLMVjDHlRNBcClyO9ew==", "dev": true, "engines": { "node": ">=12", @@ -5462,27 +5456,19 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==" + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==" }, "node_modules/@types/prop-types": { "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==" }, - "node_modules/@types/quill": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", - "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", - "dependencies": { - "parchment": "^1.1.2" - } - }, "node_modules/@types/react": { - "version": "18.3.30", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.30.tgz", - "integrity": "sha512-3ek6mwJL5/VBewBcY4S66cqlCtK3qi4WIq37Z0m/NHw1hjhI7274Mx1qz/+ggSzyBCOEf7eHjBN6INjPAWYfYw==", + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -5534,16 +5520,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz", - "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", + "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/type-utils": "8.60.1", - "@typescript-eslint/utils": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/type-utils": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -5556,30 +5542,30 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.60.1", + "@typescript-eslint/parser": "^8.67.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz", - "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", + "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3" }, "engines": { @@ -5595,13 +5581,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz", - "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", + "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", "dev": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.60.1", - "@typescript-eslint/types": "^8.60.1", + "@typescript-eslint/tsconfig-utils": "^8.67.0", + "@typescript-eslint/types": "^8.67.0", "debug": "^4.4.3" }, "engines": { @@ -5616,13 +5602,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz", - "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", + "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1" + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5633,9 +5619,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz", - "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", + "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5649,14 +5635,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz", - "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", + "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1", - "@typescript-eslint/utils": "8.60.1", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -5673,9 +5659,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz", - "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", + "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5686,15 +5672,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz", - "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", + "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", "dev": true, "dependencies": { - "@typescript-eslint/project-service": "8.60.1", - "@typescript-eslint/tsconfig-utils": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/project-service": "8.67.0", + "@typescript-eslint/tsconfig-utils": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -5722,24 +5708,24 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "dependencies": { - "brace-expansion": "^5.0.5" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -5749,9 +5735,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5761,15 +5747,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz", - "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", + "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1" + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5784,12 +5770,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz", - "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", + "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/types": "8.67.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -5833,9 +5819,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.6.tgz", - "integrity": "sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.7.tgz", + "integrity": "sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -5856,8 +5842,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.2.6", - "vitest": "3.2.6" + "@vitest/browser": "3.2.7", + "vitest": "3.2.7" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -5866,14 +5852,14 @@ } }, "node_modules/@vitest/expect": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz", - "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", "dev": true, "dependencies": { "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.6", - "@vitest/utils": "3.2.6", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -5882,12 +5868,12 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz", - "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", "dev": true, "dependencies": { - "@vitest/spy": "3.2.6", + "@vitest/spy": "3.2.7", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -5908,9 +5894,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz", - "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", "dev": true, "dependencies": { "tinyrainbow": "^2.0.0" @@ -5920,12 +5906,12 @@ } }, "node_modules/@vitest/runner": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz", - "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", "dev": true, "dependencies": { - "@vitest/utils": "3.2.6", + "@vitest/utils": "3.2.7", "pathe": "^2.0.3", "strip-literal": "^3.0.0" }, @@ -5934,12 +5920,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz", - "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", "dev": true, "dependencies": { - "@vitest/pretty-format": "3.2.6", + "@vitest/pretty-format": "3.2.7", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -5948,9 +5934,9 @@ } }, "node_modules/@vitest/spy": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz", - "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", "dev": true, "dependencies": { "tinyspy": "^4.0.3" @@ -5960,12 +5946,12 @@ } }, "node_modules/@vitest/ui": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.6.tgz", - "integrity": "sha512-mATfG3zVdhobE9U1rIpvtYD3DGuSSxqZ3Aj/8ityGqKXy8YDJ9BoAjZmAz6dZ1IZ1xI5V+MerkCczvVa+3QK9Q==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.7.tgz", + "integrity": "sha512-eVtcpJXGhS0GjMuHROfbXLhlxooyUcuip8GNzzjDD5jzafZqzanJH4W3VGmUxHNx4fv6qQGUGJHRpGUdj+9D6Q==", "dev": true, "dependencies": { - "@vitest/utils": "3.2.6", + "@vitest/utils": "3.2.7", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", @@ -5977,16 +5963,16 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "3.2.6" + "vitest": "3.2.7" } }, "node_modules/@vitest/utils": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz", - "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", "dev": true, "dependencies": { - "@vitest/pretty-format": "3.2.6", + "@vitest/pretty-format": "3.2.7", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" }, @@ -5995,11 +5981,11 @@ } }, "node_modules/@xyflow/react": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.11.0.tgz", - "integrity": "sha512-na4IO33FSs2OS72hASgZDmTYwFAkef7Z74uBUVrong3ARmQQHfnRUVaCFn1kTt5LbS6pK03TbYjCPGLjLFfziA==", + "version": "12.11.3", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.11.3.tgz", + "integrity": "sha512-G3jogHz2GWUtIOkhavUGno2YzY9u6fILIJBttfsBendb0/HWB90JG+sOTAvlIMEwyvq9zgy9V9ZQSwyQjR5QzQ==", "dependencies": { - "@xyflow/system": "0.0.77", + "@xyflow/system": "0.0.80", "classcat": "^5.0.3", "zustand": "^4.4.0" }, @@ -6019,9 +6005,9 @@ } }, "node_modules/@xyflow/system": { - "version": "0.0.77", - "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.77.tgz", - "integrity": "sha512-qCDCMCQAAgUu8yHnhloHG9F5mwPX5E+Wl8McpYIOPSSXfzFJJoZcwOcsDiAjitVKIg2de1WmJbCHfpcvxprsgg==", + "version": "0.0.80", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.80.tgz", + "integrity": "sha512-ywc3ZqG91brzWrH1WlwMdIX4goOfrpBy6AbLdVSaof/Xx9l138ijIKRExM6EkMro2F+OImGmSiA/WKcXvKVcfA==", "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", @@ -6040,9 +6026,9 @@ "integrity": "sha512-PFNMSYqFdEUkul2Ntud0HvA09AgY+F1ag0UYdpMH60wNI/qOA8cB8tlTgoALMEwIdUPJK2CjrIQ7OnbiSS/ugQ==" }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -6360,12 +6346,12 @@ } }, "node_modules/axios": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", - "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", "dependencies": { "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", + "form-data": "^4.0.6", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } @@ -6428,9 +6414,9 @@ "dev": true }, "node_modules/baseline-browser-mapping": { - "version": "2.10.33", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz", - "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==", + "version": "2.11.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", + "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", "dev": true, "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -6445,9 +6431,9 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -6455,9 +6441,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -6474,11 +6460,11 @@ } ], "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" @@ -6521,6 +6507,7 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -6550,6 +6537,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -6583,9 +6571,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001793", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", - "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "dev": true, "funding": [ { @@ -6667,14 +6655,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -6757,12 +6737,15 @@ } }, "node_modules/core-js-compat": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", - "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", + "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", "dev": true, "dependencies": { - "browserslist": "^4.28.1" + "browserslist": "^4.28.7" + }, + "engines": { + "node": ">=6.4.0" }, "funding": { "type": "opencollective", @@ -7083,25 +7066,6 @@ "node": ">=6" } }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7120,6 +7084,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -7136,6 +7101,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -7314,9 +7280,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.366", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.366.tgz", - "integrity": "sha512-OlRuhb688YTCzzU3gXPLn6nGyd+F+53INE1qaKKlu6kETErE8FYsyDh0XqXEU+uBRn0MpCzz2vfNwORhkap8qg==", + "version": "1.5.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.405.tgz", + "integrity": "sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==", "dev": true }, "node_modules/emoji-regex": { @@ -7419,6 +7385,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -7436,9 +7420,9 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", - "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "dependencies": { "call-bind": "^1.0.9", @@ -7506,14 +7490,17 @@ } }, "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", "dev": true, "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -7580,9 +7567,9 @@ } }, "node_modules/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", @@ -7590,8 +7577,8 @@ "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7697,9 +7684,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", - "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -8052,24 +8039,19 @@ } }, "node_modules/eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" }, "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", "dev": true, "engines": { "node": ">=12.0.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8078,8 +8060,7 @@ "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -8093,9 +8074,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "funding": [ { "type": "github", @@ -8172,9 +8153,9 @@ } }, "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true }, "node_modules/follow-redirects": { @@ -8228,15 +8209,15 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -8291,17 +8272,20 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", "dev": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8320,6 +8304,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8436,9 +8421,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" @@ -8529,6 +8514,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -8632,9 +8618,9 @@ "dev": true }, "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.1.0.tgz", + "integrity": "sha512-E0oAXcELOtsXe+BmpJ2EZyedbldPpriV5vICzEuo6xjC/D1lDukOI7KrpfQGF2Qc4wWEy0nk3bFORS2K5ZAhFQ==", "dependencies": { "void-elements": "3.1.0" } @@ -8748,9 +8734,9 @@ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, "node_modules/immutable": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz", - "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==" + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==" }, "node_modules/import-fresh": { "version": "3.3.1", @@ -8805,21 +8791,6 @@ "node": ">= 0.4" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -8962,6 +8933,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -8973,6 +8945,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -9095,6 +9082,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -9338,9 +9326,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -9508,9 +9496,9 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/jsonrepair": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.14.0.tgz", - "integrity": "sha512-tWPGKMZf/8UPim+fcW2EfcQ/d/7aKUrP6IECz9G3Tu6Q5dX0orSleqJ9z6sSw7qrQkjF8/Edo4DvsWBZ8H+HNg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.15.0.tgz", + "integrity": "sha512-wy8OTjwsJwQRnQJkKnMJJ9vcytRdBPAgIF/Hy6+s1dAj42BHMKiyL8JzEieIl3JY7idt8eyHwBWTO8mh/+mtwA==", "bin": { "jsonrepair": "bin/cli.js" } @@ -9619,6 +9607,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -9736,9 +9729,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -9865,9 +9858,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", @@ -9909,9 +9902,9 @@ "optional": true }, "node_modules/node-exports-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", - "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", + "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", "dev": true, "dependencies": { "array.prototype.flatmap": "^1.3.3", @@ -9947,9 +9940,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", - "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, "engines": { "node": ">=18" @@ -9967,9 +9960,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", - "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", "dev": true }, "node_modules/object-assign": { @@ -9992,25 +9985,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -10132,12 +10111,13 @@ } }, "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.6", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, @@ -10190,9 +10170,9 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==" }, "node_modules/parent-module": { "version": "1.0.1", @@ -10334,9 +10314,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "devOptional": true, "engines": { "node": ">=12" @@ -10360,9 +10340,9 @@ } }, "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "funding": [ { "type": "opencollective", @@ -10378,7 +10358,7 @@ } ], "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -10396,9 +10376,9 @@ } }, "node_modules/prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -10490,96 +10470,92 @@ } }, "node_modules/quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" } }, "node_modules/quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" }, "engines": { - "node": ">=0.10" + "node": ">= 12.0.0" } }, - "node_modules/quill-delta/node_modules/fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" - }, "node_modules/radix-ui": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.4.3.tgz", - "integrity": "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-accessible-icon": "1.1.7", - "@radix-ui/react-accordion": "1.2.12", - "@radix-ui/react-alert-dialog": "1.1.15", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-aspect-ratio": "1.1.7", - "@radix-ui/react-avatar": "1.1.10", - "@radix-ui/react-checkbox": "1.3.3", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-context-menu": "2.2.16", - "@radix-ui/react-dialog": "1.1.15", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-dropdown-menu": "2.1.16", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-form": "0.1.8", - "@radix-ui/react-hover-card": "1.1.15", - "@radix-ui/react-label": "2.1.7", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-menubar": "1.1.16", - "@radix-ui/react-navigation-menu": "1.2.14", - "@radix-ui/react-one-time-password-field": "0.1.8", - "@radix-ui/react-password-toggle-field": "0.1.3", - "@radix-ui/react-popover": "1.1.15", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-progress": "1.1.7", - "@radix-ui/react-radio-group": "1.3.8", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-scroll-area": "1.2.10", - "@radix-ui/react-select": "2.2.6", - "@radix-ui/react-separator": "1.1.7", - "@radix-ui/react-slider": "1.3.6", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-switch": "1.2.6", - "@radix-ui/react-tabs": "1.1.13", - "@radix-ui/react-toast": "1.2.15", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-toggle-group": "1.1.11", - "@radix-ui/react-toolbar": "1.1.11", - "@radix-ui/react-tooltip": "1.2.8", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-escape-keydown": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.6.7.tgz", + "integrity": "sha512-QBdhh1arIEUvPC0dQ5+nwWAxt7+N+oP/9jPwjJkGFoSk/sqxg32gJtSXGtFh8frAIcS6oC9cx2Q+7KYCQLOAeA==", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-accessible-icon": "1.1.15", + "@radix-ui/react-accordion": "1.2.20", + "@radix-ui/react-alert-dialog": "1.1.23", + "@radix-ui/react-arrow": "1.1.15", + "@radix-ui/react-aspect-ratio": "1.1.15", + "@radix-ui/react-avatar": "1.2.6", + "@radix-ui/react-checkbox": "1.3.11", + "@radix-ui/react-collapsible": "1.1.20", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-context-menu": "2.3.7", + "@radix-ui/react-dialog": "1.1.23", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.19", + "@radix-ui/react-dropdown-menu": "2.1.24", + "@radix-ui/react-focus-guards": "1.1.6", + "@radix-ui/react-focus-scope": "1.1.16", + "@radix-ui/react-form": "0.1.16", + "@radix-ui/react-hover-card": "1.1.23", + "@radix-ui/react-label": "2.1.15", + "@radix-ui/react-menu": "2.1.24", + "@radix-ui/react-menubar": "1.1.24", + "@radix-ui/react-navigation-menu": "1.2.22", + "@radix-ui/react-one-time-password-field": "0.1.16", + "@radix-ui/react-password-toggle-field": "0.1.11", + "@radix-ui/react-popover": "1.1.23", + "@radix-ui/react-popper": "1.3.7", + "@radix-ui/react-portal": "1.1.17", + "@radix-ui/react-presence": "1.1.10", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-progress": "1.1.16", + "@radix-ui/react-radio-group": "1.4.7", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-scroll-area": "1.2.18", + "@radix-ui/react-select": "2.3.7", + "@radix-ui/react-separator": "1.1.15", + "@radix-ui/react-slider": "1.4.7", + "@radix-ui/react-slot": "1.3.3", + "@radix-ui/react-switch": "1.3.7", + "@radix-ui/react-tabs": "1.1.21", + "@radix-ui/react-toast": "1.2.23", + "@radix-ui/react-toggle": "1.1.18", + "@radix-ui/react-toggle-group": "1.1.19", + "@radix-ui/react-toolbar": "1.1.19", + "@radix-ui/react-tooltip": "1.2.16", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-escape-keydown": "1.1.5", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4", + "@radix-ui/react-use-size": "1.1.4", + "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", @@ -10703,9 +10679,9 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-hook-form": { - "version": "7.77.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.77.0.tgz", - "integrity": "sha512-Sslh9YDYc0GDlWT/lxasnIduNo4v3yyvqRGvmGKUre5AFjDs/HV9/OafHGD8d+sB2yoL4UIL9L8X9i0WlZZebg==", + "version": "7.85.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.85.0.tgz", + "integrity": "sha512-U2MTriFXnclmV4rOE20p2DcRFv5WEg3FIcBFOKcOLFHDVvGIMPvLTkTWefUsonmlaVy23khVDxDWym6uJVGOzw==", "engines": { "node": ">=18.0.0" }, @@ -10812,18 +10788,18 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, - "node_modules/react-quill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", - "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "node_modules/react-quill-new": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/react-quill-new/-/react-quill-new-3.8.3.tgz", + "integrity": "sha512-c96PYqFTo0pI4R3e79B3rH9LUIce1kIQbmTBu/imJQZk8305ogyLyBqKKjG2UoInDlquXqePSzmBo2aVia3ttw==", "dependencies": { - "@types/quill": "^1.3.10", - "lodash": "^4.17.4", - "quill": "^1.3.7" + "lodash-es": "^4.17.21", + "quill": "~2.0.3" }, "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18" + "quill-delta": "^5.1.0", + "react": "^16 || ^17 || ^18 || ^19", + "react-dom": "^16 || ^17 || ^18 || ^19" } }, "node_modules/react-refresh": { @@ -10962,9 +10938,9 @@ } }, "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "engines": { "node": ">= 20.19.0" }, @@ -11063,6 +11039,7 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -11102,9 +11079,9 @@ "dev": true }, "node_modules/regjsparser": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", - "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", "dev": true, "dependencies": { "jsesc": "~3.1.0" @@ -11262,23 +11239,26 @@ "dev": true }, "node_modules/sanitize-html": { - "version": "2.17.4", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.4.tgz", - "integrity": "sha512-2HW7v2ol/uAM7sX4hbD8Z59OGWmAPrvjL8E71UWlBcj6m+kcF6ilQBLny+cIgY214QJeJT5tQuxKKqX0SQqjGQ==", + "version": "2.17.6", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.6.tgz", + "integrity": "sha512-M4bo9tfv1yfhQZZKkc6dL07ALrGJtfvNOuhX3hU9AVPR/uPQ+nKOJBqTYc7LfMQblTW04mtSWDJWEyLvygJsLA==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", - "htmlparser2": "^10.1.0", + "htmlparser2": "^12.0.0", "is-plain-object": "^5.0.0", "launder": "^1.7.1", "parse-srcset": "^1.0.2", "postcss": "^8.3.11" + }, + "engines": { + "node": ">=22.12.0" } }, "node_modules/sass": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", - "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", + "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", "dependencies": { "chokidar": "^5.0.0", "immutable": "^5.1.5", @@ -11377,6 +11357,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11393,6 +11374,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11444,14 +11426,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -11694,18 +11676,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11715,15 +11698,15 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -11915,24 +11898,24 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "dependencies": { - "brace-expansion": "^5.0.5" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -12086,6 +12069,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "deprecated": "unmaintained", "dev": true, "bin": { "tsconfck": "bin/tsconfck.js" @@ -12241,15 +12225,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.1.tgz", - "integrity": "sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz", + "integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.60.1", - "@typescript-eslint/parser": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1", - "@typescript-eslint/utils": "8.60.1" + "@typescript-eslint/eslint-plugin": "8.67.0", + "@typescript-eslint/parser": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12331,9 +12315,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { @@ -12956,9 +12940,9 @@ } }, "node_modules/vite-node/node_modules/rollup": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.0.tgz", - "integrity": "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "dependencies": { "@types/estree": "1.0.9" @@ -12971,31 +12955,32 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.61.0", - "@rollup/rollup-android-arm64": "4.61.0", - "@rollup/rollup-darwin-arm64": "4.61.0", - "@rollup/rollup-darwin-x64": "4.61.0", - "@rollup/rollup-freebsd-arm64": "4.61.0", - "@rollup/rollup-freebsd-x64": "4.61.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", - "@rollup/rollup-linux-arm-musleabihf": "4.61.0", - "@rollup/rollup-linux-arm64-gnu": "4.61.0", - "@rollup/rollup-linux-arm64-musl": "4.61.0", - "@rollup/rollup-linux-loong64-gnu": "4.61.0", - "@rollup/rollup-linux-loong64-musl": "4.61.0", - "@rollup/rollup-linux-ppc64-gnu": "4.61.0", - "@rollup/rollup-linux-ppc64-musl": "4.61.0", - "@rollup/rollup-linux-riscv64-gnu": "4.61.0", - "@rollup/rollup-linux-riscv64-musl": "4.61.0", - "@rollup/rollup-linux-s390x-gnu": "4.61.0", - "@rollup/rollup-linux-x64-gnu": "4.61.0", - "@rollup/rollup-linux-x64-musl": "4.61.0", - "@rollup/rollup-openbsd-x64": "4.61.0", - "@rollup/rollup-openharmony-arm64": "4.61.0", - "@rollup/rollup-win32-arm64-msvc": "4.61.0", - "@rollup/rollup-win32-ia32-msvc": "4.61.0", - "@rollup/rollup-win32-x64-gnu": "4.61.0", - "@rollup/rollup-win32-x64-msvc": "4.61.0", + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", "fsevents": "~2.3.2" } }, @@ -13113,19 +13098,19 @@ } }, "node_modules/vitest": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz", - "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", "dev": true, "dependencies": { "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.6", - "@vitest/mocker": "3.2.6", - "@vitest/pretty-format": "^3.2.6", - "@vitest/runner": "3.2.6", - "@vitest/snapshot": "3.2.6", - "@vitest/spy": "3.2.6", - "@vitest/utils": "3.2.6", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", @@ -13155,8 +13140,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.6", - "@vitest/ui": "3.2.6", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", "happy-dom": "*", "jsdom": "*" }, @@ -13578,9 +13563,9 @@ } }, "node_modules/vitest/node_modules/rollup": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.0.tgz", - "integrity": "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "dependencies": { "@types/estree": "1.0.9" @@ -13593,31 +13578,32 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.61.0", - "@rollup/rollup-android-arm64": "4.61.0", - "@rollup/rollup-darwin-arm64": "4.61.0", - "@rollup/rollup-darwin-x64": "4.61.0", - "@rollup/rollup-freebsd-arm64": "4.61.0", - "@rollup/rollup-freebsd-x64": "4.61.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", - "@rollup/rollup-linux-arm-musleabihf": "4.61.0", - "@rollup/rollup-linux-arm64-gnu": "4.61.0", - "@rollup/rollup-linux-arm64-musl": "4.61.0", - "@rollup/rollup-linux-loong64-gnu": "4.61.0", - "@rollup/rollup-linux-loong64-musl": "4.61.0", - "@rollup/rollup-linux-ppc64-gnu": "4.61.0", - "@rollup/rollup-linux-ppc64-musl": "4.61.0", - "@rollup/rollup-linux-riscv64-gnu": "4.61.0", - "@rollup/rollup-linux-riscv64-musl": "4.61.0", - "@rollup/rollup-linux-s390x-gnu": "4.61.0", - "@rollup/rollup-linux-x64-gnu": "4.61.0", - "@rollup/rollup-linux-x64-musl": "4.61.0", - "@rollup/rollup-openbsd-x64": "4.61.0", - "@rollup/rollup-openharmony-arm64": "4.61.0", - "@rollup/rollup-win32-arm64-msvc": "4.61.0", - "@rollup/rollup-win32-ia32-msvc": "4.61.0", - "@rollup/rollup-win32-x64-gnu": "4.61.0", - "@rollup/rollup-win32-x64-msvc": "4.61.0", + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", "fsevents": "~2.3.2" } }, @@ -13853,9 +13839,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", - "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", @@ -13978,9 +13964,9 @@ } }, "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/GUI/package.json b/GUI/package.json index 9f7b897ce..cf38d0b0f 100644 --- a/GUI/package.json +++ b/GUI/package.json @@ -4,8 +4,8 @@ "type": "module", "private": true, "dependencies": { - "@buerokratt-ria/header": "^0.1.52", - "@buerokratt-ria/menu": "^0.2.13", + "@buerokratt-ria/header": "^0.1.53", + "@buerokratt-ria/menu": "^0.2.15", "@buerokratt-ria/styles": "^0.0.1", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", @@ -52,11 +52,11 @@ "react-idle-timer": "^5.7.2", "react-json-tree": "^0.20.0", "react-loading-indicators": "^1.0.1", - "react-quill": "^2.0.0", + "react-quill-new": "^3.8.3", "react-router-dom": "^6.6.2", "react-textarea-autosize": "^8.4.0", "rxjs": "^7.8.0", - "sanitize-html": "^2.17.0", + "sanitize-html": "^2.17.6", "sass": "^1.57.1", "sass-loader": "^13.2.0", "to-json-schema": "^0.2.5", @@ -79,6 +79,11 @@ "test:coverage": "vitest run --coverage", "typecheck": "./typecheck.sh" }, + "overrides": { + "sanitize-html": { + "htmlparser2": "10.1.0" + } + }, "browserslist": [ "defaults", "not IE 11" @@ -102,7 +107,7 @@ "@types/react": "^18.2.0", "@types/react-datepicker": "^4.8.0", "@types/react-dom": "^18.2.0", - "@types/sanitize-html": "^2.16.0", + "@types/sanitize-html": "^2.16.1", "@types/to-json-schema": "^0.2.1", "@types/uuid": "^9.0.1", "@vitejs/plugin-react": "^5.1.1", diff --git a/GUI/src/components/Dropdown/Dropdown.scss b/GUI/src/components/Dropdown/Dropdown.scss index 5bccc7f20..78bf08222 100644 --- a/GUI/src/components/Dropdown/Dropdown.scss +++ b/GUI/src/components/Dropdown/Dropdown.scss @@ -9,14 +9,11 @@ border-radius: 6px; box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35); z-index: 1000; - resize: both; - overflow: auto; + overflow: hidden; width: 600px; min-width: 400px; max-width: 600px; - min-height: 235px; - max-height: 75vh; - height: auto; + max-height: 90vh; display: flex; flex-direction: column; @@ -39,7 +36,6 @@ width: 600px; padding: 10px; flex: 1; - overflow-y: auto; min-height: 0; display: flex; flex-direction: column; @@ -48,10 +44,10 @@ .dropdown--center { position: fixed; - top: 50%; + top: 5vh; left: 50%; - transform: translate(-50%, -50%); - max-height: 75vh; + transform: translateX(-50%); + max-height: 90vh; max-width: 800px; width: 600px; background: white; diff --git a/GUI/src/components/Flow/Controls/ImportExportControls.tsx b/GUI/src/components/Flow/Controls/ImportExportControls.tsx index 85cbeaac7..86abdddae 100644 --- a/GUI/src/components/Flow/Controls/ImportExportControls.tsx +++ b/GUI/src/components/Flow/Controls/ImportExportControls.tsx @@ -21,7 +21,7 @@ import { import { removeTrailingUnderscores } from 'utils/string-util'; const ImportExportControls: FC = () => { - const { getNodes, getEdges, setNodes, setEdges } = useReactFlow(); + const { getNodes, getEdges } = useReactFlow(); const { t } = useTranslation(); const { setHasUnsavedChanges, saveToHistory, setNodes: setStoreNodes, setEdges: setStoreEdges } = useServiceStore(); const fileInputRef = useRef(null); @@ -165,8 +165,6 @@ const ImportExportControls: FC = () => { saveToHistory(); setStoreNodes(nodes); setStoreEdges(edges); - setNodes(nodes); - setEdges(edges); saveToHistory({ nodes, edges }); setHasUnsavedChanges(true); closeImportModal(); @@ -174,8 +172,6 @@ const ImportExportControls: FC = () => { importedFlowData, getNodes, getEdges, - setNodes, - setEdges, setStoreNodes, setStoreEdges, setHasUnsavedChanges, diff --git a/GUI/src/components/Flow/Controls/UndoRedoControls.tsx b/GUI/src/components/Flow/Controls/UndoRedoControls.tsx index d45cf7974..58e2d398a 100644 --- a/GUI/src/components/Flow/Controls/UndoRedoControls.tsx +++ b/GUI/src/components/Flow/Controls/UndoRedoControls.tsx @@ -9,7 +9,13 @@ const UndoRedoControls: FC = () => { const { undo, redo, canUndo, canRedo } = useServiceStore(); useEffect(() => { + const isEditableTarget = (target: EventTarget | null) => + target instanceof HTMLElement && + (target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA'); + const handleKeyDown = (event: KeyboardEvent) => { + if (isEditableTarget(event.target)) return; + if (event.ctrlKey || event.metaKey) { if (event.key === 'z' && !event.shiftKey && canUndo()) { event.preventDefault(); diff --git a/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.scss b/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.scss index 3689ab3af..126242155 100644 --- a/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.scss +++ b/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.scss @@ -54,6 +54,23 @@ &__action-btn { color: #555867; } + + &__skeleton-bar { + height: 14px; + border-radius: 4px; + background: #d2d3d8; + animation: api-elements-skeleton-pulse 1.2s ease-in-out infinite; + } +} + +@keyframes api-elements-skeleton-pulse { + 0%, + 100% { + opacity: 0.6; + } + 50% { + opacity: 1; + } } [data-theme='dark'] { @@ -92,5 +109,9 @@ &__action-btn { color: var(--dark-text-secondary); } + + &__skeleton-bar { + background: var(--dark-bg-extra-light); + } } } diff --git a/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.tsx b/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.tsx index 2d2d8b6c2..89ee30863 100644 --- a/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.tsx +++ b/GUI/src/components/Flow/EdgeTypes/ApiElementsPanel.tsx @@ -35,9 +35,6 @@ import { EndpointData } from 'types/endpoint'; type SortCol = 'name' | 'status' | 'schema'; -/** Height of the collapsible trigger header (search bar row) in pixels */ -const HEADER_HEIGHT_PX = 42; - const SortIcon: React.FC<{ colId: SortCol; currentSortId: SortCol | undefined; currentDesc: boolean }> = ({ colId, currentSortId, @@ -210,189 +207,204 @@ const ApiElementsPanel: React.FC = ({ onAddToCanvas }) => {/* Table + footer */} {tableOpen && (
- {loading ? ( -

{t('global.loading')}

- ) : ( -
+ -
- - - - - - - - - {endpoints.map((endpoint, index) => { - const meta = verificationMap[endpoint.endpointId]; - const status = meta?.verificationStatus ?? 'unverified'; - const isVerified = status === 'verified'; - const isUntested = status === 'unverified'; - const statusColor = isVerified ? '#27ae60' : '#e74c3c'; - let statusCode: string; - if (isUntested) { - statusCode = '---'; - } else { - statusCode = meta?.lastStatusCode ? String(meta.lastStatusCode) : '---'; - } - const schemaCaptured = meta?.schemaCaptured ?? false; - const isTesting = testingId === endpoint.endpointId; - const def = endpoint.definitions?.[0]; - return ( - handleRowClick(endpoint, index)} - > - + + + + + + + + + {loading + ? Array.from({ length: pagination.pageSize }, (_, i) => ( + - + - ); - })} - -
handleSort('name')} - style={{ - cursor: 'pointer', - userSelect: 'none', - }} - > - {' '} - {t('apiRegistry.columns.name')} - handleSort('status')} - style={{ - cursor: 'pointer', - userSelect: 'none', - width: 90, - textAlign: 'center', - }} - > - {' '} - {t('apiRegistry.columns.status')} - handleSort('schema')} - style={{ - cursor: 'pointer', - userSelect: 'none', - width: 100, - textAlign: 'center', - whiteSpace: 'nowrap', - }} - > - {' '} - {t('apiRegistry.columns.schema')} - -
- }> - - - {endpoint.name} - - } size="small" style={{ color: '#3f82ff', flexShrink: 0 }} /> - - -
handleSort('name')} + style={{ + cursor: 'pointer', + userSelect: 'none', + }} + > + {' '} + {t('apiRegistry.columns.name')} + handleSort('status')} + style={{ + cursor: 'pointer', + userSelect: 'none', + width: 90, + textAlign: 'center', + }} + > + {' '} + {t('apiRegistry.columns.status')} + handleSort('schema')} + style={{ + cursor: 'pointer', + userSelect: 'none', + width: 100, + textAlign: 'center', + whiteSpace: 'nowrap', + }} + > + {' '} + {t('apiRegistry.columns.schema')} + +
- - : } - size="small" - style={{ color: statusColor }} - /> - {statusCode} - +
- : } - size="small" - style={{ color: schemaCaptured ? '#27ae60' : '#e74c3c' }} - /> +
-
- - - -
+
+
-
- )} + )) + : endpoints.map((endpoint, index) => { + const meta = verificationMap[endpoint.endpointId]; + const status = meta?.verificationStatus ?? 'unverified'; + const isVerified = status === 'verified'; + const isUntested = status === 'unverified'; + const statusColor = isVerified ? '#27ae60' : '#e74c3c'; + let statusCode: string; + if (isUntested) { + statusCode = '---'; + } else { + statusCode = meta?.lastStatusCode ? String(meta.lastStatusCode) : '---'; + } + const schemaCaptured = meta?.schemaCaptured ?? false; + const isTesting = testingId === endpoint.endpointId; + const def = endpoint.definitions?.[0]; + return ( + handleRowClick(endpoint, index)} + > + + }> + + + {endpoint.name} + + } + size="small" + style={{ color: '#3f82ff', flexShrink: 0 }} + /> + + + + + + : } + size="small" + style={{ color: statusColor }} + /> + {statusCode} + + + + : } + size="small" + style={{ color: schemaCaptured ? '#27ae60' : '#e74c3c' }} + /> + + +
+ + + +
+ + + ); + })} + + +
(elements: T[], activeId: string | number, overId: st return arrayMove(elements, oldIndex, newIndex); } +type HighlightData = { readonly isHighlighted?: boolean; readonly isDimmed?: boolean }; + function CustomEdge({ id, label, @@ -44,7 +46,8 @@ function CustomEdge({ targetPosition, style, markerEnd, -}: EdgeProps) { + data: highlightData, +}: EdgeProps>) { const [edgePath, edgeCenterX, edgeCenterY] = getBezierPath({ sourceX, sourceY, @@ -138,7 +141,7 @@ function CustomEdge({ transform: `translate(${edgeCenterX}px, ${edgeCenterY}px) translate(-50%, -50%)`, }} onClick={() => {}} - className="edge-button nodrag nopan" + className={`edge-button nodrag nopan${highlightData?.isDimmed ? ' edge-button--dimmed' : ''}${highlightData?.isHighlighted ? ' edge-button--highlighted' : ''}`} > {label ?? '+'} diff --git a/GUI/src/components/Flow/McqBranchSelectModal.tsx b/GUI/src/components/Flow/McqBranchSelectModal.tsx index 58f17b33a..2b191b4f4 100644 --- a/GUI/src/components/Flow/McqBranchSelectModal.tsx +++ b/GUI/src/components/Flow/McqBranchSelectModal.tsx @@ -10,14 +10,15 @@ type McqBranchSelectModalProps = { readonly emptyBranches: McqEmptyBranch[]; readonly onSelect: (branch: McqEmptyBranch) => void; readonly onClose: () => void; + readonly description?: string; }; -const McqBranchSelectModal: FC = ({ emptyBranches, onSelect, onClose }) => { +const McqBranchSelectModal: FC = ({ emptyBranches, onSelect, onClose, description }) => { const { t } = useTranslation(); return ( -

{t('serviceFlow.mcq.emptyBranchesMessage', { count: emptyBranches.length })}

+

{description ?? t('serviceFlow.mcq.emptyBranchesMessage', { count: emptyBranches.length })}

{emptyBranches.map((branch) => ( + )} + + {isLinkedServiceDeleted && ( +

+ {t('serviceFlow.element.jumpToService.deletedService', { + serviceName: jumpToService.serviceName, + })} +

+ )} + {!isLinkedServiceDeleted && services.length === 0 && (

{t('serviceFlow.element.jumpToService.noActiveServices')}

diff --git a/GUI/src/components/FlowElementsPopup/MultiChoiceQuestionContent.tsx b/GUI/src/components/FlowElementsPopup/MultiChoiceQuestionContent.tsx index d6960334e..7c44cf378 100644 --- a/GUI/src/components/FlowElementsPopup/MultiChoiceQuestionContent.tsx +++ b/GUI/src/components/FlowElementsPopup/MultiChoiceQuestionContent.tsx @@ -2,7 +2,7 @@ import FormError from 'components/FormElements/FormError'; import { FC, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { MdCheck, MdDeleteOutline, MdEdit } from 'react-icons/md'; -import ReactQuill from 'react-quill'; +import ReactQuill from 'react-quill-new'; import useServiceStore from 'store/new-services.store'; import useServiceListStore from 'store/services.store'; import { generateUniqueId } from 'utils/flow-utils'; diff --git a/GUI/src/components/FlowElementsPopup/PreviousVariables.tsx b/GUI/src/components/FlowElementsPopup/PreviousVariables.tsx index 5a39a4917..ad0267e74 100644 --- a/GUI/src/components/FlowElementsPopup/PreviousVariables.tsx +++ b/GUI/src/components/FlowElementsPopup/PreviousVariables.tsx @@ -28,7 +28,7 @@ type PreviousVariablesProps = { // Unique key for predefined elements, used below to identify it // All other assign element keys are UUIDs -const predefinedInputKeys = ['-1', '-2']; +const predefinedInputKeys = ['-1', '-2', '-3', '-4', '-5', '-6']; const PreviousVariables: FC = ({ node }) => { const { t } = useTranslation(); @@ -36,6 +36,7 @@ const PreviousVariables: FC = ({ node }) => { let endpointsVariables = useServiceStore((state) => state.endpointsResponseVariables); const nodes = useServiceStore((state) => state.nodes); const edges = useServiceStore((state) => state.edges); + const serviceName = useServiceStore((state) => state.name); const [endpoints, setEndpoints] = useState([]); const [assignedVariables, setAssignedVariables] = useState([]); const [endpointsObjectTree, setEndpointsObjectTree] = useState<{ @@ -86,7 +87,10 @@ const PreviousVariables: FC = ({ node }) => { const endpointNodes = previousNodes.filter((node) => node.data.stepType === StepType.UserDefined); const names = endpointNodes.map((node) => node.data.label?.toString().split(' ')[0]); const filteredEndpointsVariables = endpointsVariables.filter((endpoint) => names.includes(endpoint.name)); - setEndpoints(filteredEndpointsVariables); + const uniqueEndpointsVariables = Array.from( + new Map(filteredEndpointsVariables.map((endpoint) => [endpoint.name, endpoint])).values(), + ); + setEndpoints(uniqueEndpointsVariables); // Get Assign variables const assignNodes: Node[] = @@ -109,10 +113,30 @@ const PreviousVariables: FC = ({ node }) => { key: 'Empty Content Type', value: stringToTemplate(''), }, + { + id: predefinedInputKeys[2], + key: 'Chat Id', + value: stringToTemplate('chatId'), + }, + { + id: predefinedInputKeys[3], + key: 'Nonce Key', + value: 'x-ruuter-nonce', + }, + { + id: predefinedInputKeys[4], + key: 'Nonce Value', + value: stringToTemplate('nonce'), + }, + { + id: predefinedInputKeys[5], + key: 'Service Name', + value: serviceName, + }, ]; setAssignedVariables([...assignElements, ...predefinedInputElements, ...newAssignElements]); - }, [edges, endpointsVariables, newAssignElements, node.id, nodes]); + }, [edges, endpointsVariables, newAssignElements, node.id, nodes, serviceName]); function getParentNode(nodes: Node[], edges: Edge[], node: Node): Node | undefined { const parentEdge = edges.findLast((edge) => edge.target === node.id); @@ -175,59 +199,75 @@ const PreviousVariables: FC = ({ node }) => { style={{ borderBottom: border, borderTop: border }} /> )} - {endpoints.map((endpoint) => ( - - - - {endpoint.chips.map((chip) => { - const typeColor = getTypeColor(chip.data); - const dragData: Assign = { - id: v4(), - key: chip.name, - value: stringToTemplate(chip.value), - data: chip.data, - }; - - return isObject(chip.data) ? ( - - { - setEndpointsObjectTree( - endpointsObjectTree?.path === chip.value - ? null - : { - data: chip.data, - path: chip.value, - }, - ); - }} - > - {endpointsObjectTree?.path === chip.value ? chip.name + ' ▲' : chip.name + ' ▼'} - - - ) : ( - - - {chip.name} - - - ); - })} - - - ))} + {endpoints.length > 0 && ( + + {endpoints.map((endpoint) => ( + + + + {endpoint.chips.map((chip) => { + const typeColor = getTypeColor(chip.data); + const dragData: Assign = { + id: v4(), + key: chip.name, + value: stringToTemplate(chip.value), + data: chip.data, + }; + + return isObject(chip.data) ? ( + + { + setEndpointsObjectTree( + endpointsObjectTree?.path === chip.value + ? null + : { + data: chip.data, + path: chip.value, + }, + ); + }} + > + {endpointsObjectTree?.path === chip.value ? chip.name + ' ▲' : chip.name + ' ▼'} + + + ) : ( + + + {chip.name} + + + ); + })} + + + ))} + + )} )} {isObject(endpointsObjectTree?.data) && ( diff --git a/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx b/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx new file mode 100644 index 000000000..222fb2381 --- /dev/null +++ b/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx @@ -0,0 +1,41 @@ +import { Track } from 'components'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { GroupType } from './types'; + +interface ConnectorToggleProps { + readonly connector: GroupType; + readonly connectorNot: boolean; + readonly onChangeConnector: (connector: GroupType) => void; + readonly onToggleNot: () => void; +} + +const ConnectorToggle: React.FC = ({ + connector, + connectorNot, + onChangeConnector, + onToggleNot, +}) => { + const { t } = useTranslation(); + + const notButtonClassName = connectorNot ? 'rule-red' : 'rule-gray'; + const andButtonClassName = connector === 'and' ? 'rule-green' : 'rule-gray'; + const orButtonClassName = connector === 'or' ? 'rule-green' : 'rule-gray'; + + return ( + + + + + + ); +}; + +export default ConnectorToggle; diff --git a/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx b/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx index 5e3314247..9fbc2eaaf 100644 --- a/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx +++ b/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx @@ -3,8 +3,9 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { MdDeleteOutline } from 'react-icons/md'; +import ConnectorToggle from './ConnectorToggle'; import RuleElement from './ruleElement'; -import { Group, isInstanceOfRule, Rule, RuleGroupBuilderProps } from './types'; +import { Group, GroupOrRule, isInstanceOfRule, Rule, RuleGroupBuilderProps } from './types'; import { useRuleBuilder } from './useRuleBuilder'; import '../styles.scss'; @@ -17,8 +18,8 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang addGroup, remove, toggleNot, - changeToAnd, - changeToOr, + changeConnector, + toggleConnectorNot, changeRule, onSubGroupChange, } = useRuleBuilder({ @@ -28,8 +29,6 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang seedGroup, }); - const andButtonClassName = groupInfo.type === 'and' ? 'rule-green' : 'rule-gray'; - const orButtonClassName = groupInfo.type === 'or' ? 'rule-green' : 'rule-gray'; const notButtonClassName = groupInfo.not ? 'rule-red' : 'rule-gray'; return ( @@ -39,12 +38,6 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang - - -
{name || '...'}
+ + + + + + + {otherServices.length === 0 ? ( +
+ {t('serviceFlow.element.jumpToService.noActiveServices')} +
+ ) : ( + otherServices.map((service) => ( + navigateToService(service.serviceId, navigate)} + > + {service.name} + + )) + )} +
+
+
+
diff --git a/GUI/src/hooks/flow/useEdgeAdd.ts b/GUI/src/hooks/flow/useEdgeAdd.ts index 95e6bcb98..0c6c47aef 100644 --- a/GUI/src/hooks/flow/useEdgeAdd.ts +++ b/GUI/src/hooks/flow/useEdgeAdd.ts @@ -114,7 +114,16 @@ function useEdgeAdd(id: string) { let newEdges: Edge[] = []; setEdges((edges) => { - newEdges = edges.filter((e) => e.id !== id).concat([sourceEdge], targetEdge ?? [], ghostEdges); + const edgeIndex = edges.findIndex((e) => e.id === id); + const remainingEdges = edges.filter((e) => e.id !== id); + const insertIndex = edgeIndex === -1 ? remainingEdges.length : edgeIndex; + newEdges = [ + ...remainingEdges.slice(0, insertIndex), + sourceEdge, + ...(targetEdge ? [targetEdge] : []), + ...ghostEdges, + ...remainingEdges.slice(insertIndex), + ]; return newEdges; }); diff --git a/GUI/src/hooks/flow/useMcqConnect.ts b/GUI/src/hooks/flow/useMcqConnect.ts index 153585f5e..753149150 100644 --- a/GUI/src/hooks/flow/useMcqConnect.ts +++ b/GUI/src/hooks/flow/useMcqConnect.ts @@ -1,17 +1,23 @@ import { Connection, useReactFlow } from '@xyflow/react'; import { useCallback, useState } from 'react'; import useServiceStore from 'store/new-services.store'; +import { StepType } from 'types'; +import { + applyConditionBranchConnection, + conditionHasEmptyBranches, + getEmptyConditionBranches, +} from 'utils/conditional-flow-utils'; import { applyMcqBranchConnection, applySimpleConnection, getEmptyMcqBranches, - getMcqNodeIdFromConnection, McqEmptyBranch, } from 'utils/mcq-flow-utils'; export type PendingMcqConnection = { readonly connection: Connection; readonly emptyBranches: McqEmptyBranch[]; + readonly nodeType: StepType.MultiChoiceQuestion | StepType.Condition; }; function useMcqConnect() { @@ -49,7 +55,26 @@ function useMcqConnect() { [commitConnection, getEdges, getNodes], ); - const applyMcqIncomingConnection = useCallback( + const applyConditionOutgoingConnection = useCallback( + (connection: Connection, branch: McqEmptyBranch) => { + const { source, target } = connection; + if (!source || !target) return; + + const nodes = getNodes(); + const edges = getEdges(); + const result = applyConditionBranchConnection({ + nodes, + edges, + conditionId: source, + targetId: target, + branch, + }); + commitConnection(result.nodes, result.edges); + }, + [commitConnection, getEdges, getNodes], + ); + + const applyIncomingConnection = useCallback( (connection: Connection) => { const nodes = getNodes(); const edges = getEdges(); @@ -61,36 +86,70 @@ function useMcqConnect() { const handleConnect = useCallback( (connection: Connection) => { - const mcqId = getMcqNodeIdFromConnection(connection, getNode); - if (!mcqId) return false; - - if (connection.target === mcqId) { - applyMcqIncomingConnection(connection); + const sourceNode = connection.source ? getNode(connection.source) : undefined; + const targetNode = connection.target ? getNode(connection.target) : undefined; + + if (sourceNode?.data?.stepType === StepType.MultiChoiceQuestion) { + const mcqId = sourceNode.id; + const nodes = getNodes(); + const edges = getEdges(); + const emptyBranches = getEmptyMcqBranches(mcqId, nodes, edges); + if (emptyBranches.length === 0) return true; + + if (emptyBranches.length === 1) { + applyMcqOutgoingConnection(connection, emptyBranches[0]); + return true; + } + setPendingConnection({ connection, emptyBranches, nodeType: StepType.MultiChoiceQuestion }); return true; } - const nodes = getNodes(); - const edges = getEdges(); - const emptyBranches = getEmptyMcqBranches(mcqId, nodes, edges); - if (emptyBranches.length === 0) return true; + if (sourceNode?.data?.stepType === StepType.Condition) { + const conditionId = sourceNode.id; + const nodes = getNodes(); + const edges = getEdges(); + const emptyBranches = getEmptyConditionBranches(conditionId, nodes, edges); + if (emptyBranches.length === 0) return true; + + if (emptyBranches.length === 1) { + applyConditionOutgoingConnection(connection, emptyBranches[0]); + return true; + } + setPendingConnection({ connection, emptyBranches, nodeType: StepType.Condition }); + return true; + } - if (emptyBranches.length === 1) { - applyMcqOutgoingConnection(connection, emptyBranches[0]); - } else { - setPendingConnection({ connection, emptyBranches }); + if ( + targetNode?.data?.stepType === StepType.MultiChoiceQuestion || + targetNode?.data?.stepType === StepType.Condition + ) { + applyIncomingConnection(connection); + return true; } - return true; + + return false; }, - [applyMcqIncomingConnection, applyMcqOutgoingConnection, getEdges, getNode, getNodes], + [ + applyIncomingConnection, + applyMcqOutgoingConnection, + applyConditionOutgoingConnection, + getEdges, + getNode, + getNodes, + ], ); const confirmBranch = useCallback( (branch: McqEmptyBranch) => { if (!pendingConnection) return; - applyMcqOutgoingConnection(pendingConnection.connection, branch); + if (pendingConnection.nodeType === StepType.MultiChoiceQuestion) { + applyMcqOutgoingConnection(pendingConnection.connection, branch); + } else { + applyConditionOutgoingConnection(pendingConnection.connection, branch); + } setPendingConnection(null); }, - [applyMcqOutgoingConnection, pendingConnection], + [applyMcqOutgoingConnection, applyConditionOutgoingConnection, pendingConnection], ); const cancelBranchSelection = useCallback(() => { @@ -101,11 +160,14 @@ function useMcqConnect() { (connection: Connection) => { if (connection.source === connection.target) return false; - const mcqId = getMcqNodeIdFromConnection(connection, getNode); - if (!mcqId) return true; + const sourceNode = connection.source ? getNode(connection.source) : undefined; + + if (sourceNode?.data?.stepType === StepType.MultiChoiceQuestion) { + return getEmptyMcqBranches(sourceNode.id, getNodes(), getEdges()).length > 0; + } - if (connection.source === mcqId) { - return getEmptyMcqBranches(mcqId, getNodes(), getEdges()).length > 0; + if (sourceNode?.data?.stepType === StepType.Condition) { + return conditionHasEmptyBranches(sourceNode.id, getNodes(), getEdges()); } return true; diff --git a/GUI/src/hooks/flow/useNodeHighlight.ts b/GUI/src/hooks/flow/useNodeHighlight.ts new file mode 100644 index 000000000..3925395f6 --- /dev/null +++ b/GUI/src/hooks/flow/useNodeHighlight.ts @@ -0,0 +1,75 @@ +import { getConnectedEdges, getIncomers, getOutgoers } from '@xyflow/react'; +import type { Edge, Node } from '@xyflow/react'; +import { MouseEvent, useCallback, useMemo, useState } from 'react'; + +const stripClasses = (cls: string, ...toRemove: string[]) => + cls + .replace(new RegExp(String.raw`\b(${toRemove.join('|')})\b`, 'g'), '') + .replace(/\s+/g, ' ') + .trim(); + +const omitHighlightData = (data: unknown) => + Object.fromEntries(Object.entries((data as object) ?? {}).filter(([k]) => k !== 'isHighlighted' && k !== 'isDimmed')); + +export function useNodeHighlight(nodes: Node[], edges: Edge[]) { + const [highlightedNodeId, setHighlightedNodeId] = useState(null); + + const handleNodeClick = useCallback((_event: MouseEvent, node: Node) => { + if (node.type === 'ghost' || node.type === 'start') return; + setHighlightedNodeId(node.id); + }, []); + + const handlePaneClick = useCallback(() => { + setHighlightedNodeId(null); + }, []); + + const clearHighlight = (currentNodes: Node[], currentEdges: Edge[]) => ({ + displayNodes: currentNodes.map((n) => ({ + ...n, + className: stripClasses(n.className ?? '', 'node-highlighted', 'node-dimmed') || undefined, + })), + displayEdges: currentEdges.map((e) => ({ + ...e, + className: stripClasses(e.className ?? '', 'edge-highlighted', 'edge-dimmed') || undefined, + data: omitHighlightData(e.data), + })), + }); + + const { displayNodes, displayEdges } = useMemo(() => { + if (!highlightedNodeId) { + return clearHighlight(nodes, edges); + } + + const node = nodes.find((n) => n.id === highlightedNodeId); + if (!node) { + return clearHighlight(nodes, edges); + } + + const connectedEdges = getConnectedEdges([node], edges); + const connectedEdgeIds = new Set(connectedEdges.map((e) => e.id)); + + const incomers = getIncomers(node, nodes, edges); + const outgoers = getOutgoers(node, nodes, edges); + const connectedNodeIds = new Set([highlightedNodeId, ...incomers.map((n) => n.id), ...outgoers.map((n) => n.id)]); + + const displayNodes = nodes.map((n) => { + const base = stripClasses(n.className ?? '', 'node-highlighted', 'node-dimmed'); + const isHighlighted = connectedNodeIds.has(n.id) && n.type === 'custom'; + return { ...n, className: `${base}${isHighlighted ? ' node-highlighted' : ''}`.trim() }; + }); + + const displayEdges = edges.map((e) => { + const isHighlighted = connectedEdgeIds.has(e.id); + const base = stripClasses(e.className ?? '', 'edge-highlighted', 'edge-dimmed'); + return { + ...e, + className: `${base} ${isHighlighted ? 'edge-highlighted' : 'edge-dimmed'}`.trim(), + data: { ...(e.data as object | undefined), isHighlighted, isDimmed: !isHighlighted }, + }; + }); + + return { displayNodes, displayEdges }; + }, [highlightedNodeId, nodes, edges]); + + return { displayNodes, displayEdges, handleNodeClick, handlePaneClick, highlightedNodeId }; +} diff --git a/GUI/src/hooks/flow/useOnNodeDelete.ts b/GUI/src/hooks/flow/useOnNodeDelete.ts index 875177a52..79b21c053 100644 --- a/GUI/src/hooks/flow/useOnNodeDelete.ts +++ b/GUI/src/hooks/flow/useOnNodeDelete.ts @@ -77,7 +77,12 @@ const processDeletedNodes = ( updatedNodes = [...updatedNodes.filter((n) => n.id !== node.id), ...newGhostNodes]; updatedEdges = [...getRemainingEdges(updatedEdges, getConnectedEdges([node], updatedEdges)), ...newEdges]; } else { - if (outgoers.length === 0 || outgoers.length > 1) { + const edgesWithoutDeleted = getRemainingEdges(updatedEdges, getConnectedEdges([node], updatedEdges)); + if ( + outgoers.length === 0 || + outgoers.length > 1 || + (outgoers.length === 1 && getIncomers(outgoers[0], updatedNodes, edgesWithoutDeleted).length > 0) + ) { const ghostNode: Node = { id: generateUniqueId(), type: 'ghost', @@ -231,7 +236,7 @@ export const useOnNodesDelete = () => { type: 'step', animated: true, deletable: false, - label: '+', + label: deleted[0].label ?? '+', }; setNodes((nds) => [...nds, ghostNode]); diff --git a/GUI/src/i18n/en/common.json b/GUI/src/i18n/en/common.json index 5d3e07586..7f245dccd 100644 --- a/GUI/src/i18n/en/common.json +++ b/GUI/src/i18n/en/common.json @@ -330,7 +330,8 @@ "elementNameAlreadyExistsMessage": "An Element with the same name already exists" }, "popup": { - "unsavedChanges": "You have unsaved changes. Are you sure you want to leave? Unsaved changes will be lost." + "unsavedChanges": "You have unsaved changes. Are you sure you want to leave? Unsaved changes will be lost.", + "saveAndContinue": "Save and continue" }, "titleRequired": "Title is mandatory", "chooseMemorySlots": "Choose memory slots" @@ -368,7 +369,10 @@ "targetService": "Target service", "selectService": "Select a service...", "noActiveServices": "No active services available", - "parameters": "Parameters" + "parameters": "Parameters", + "navigateToService": "Open this service", + "deletedService": "{{serviceName}} service has been deleted and can no longer be opened", + "alreadyOnService": "You are already viewing this service" } }, "popup": { @@ -419,6 +423,9 @@ "selectBranchTitle": "Select branch", "emptyBranchesMessage": "This multi-choice question has {{count}} empty branches. Which branch do you want to connect?" }, + "condition": { + "emptyPathsMessage": "This conditional node has {{count}} empty paths. Which path do you want to connect?" + }, "previousVariables": { "assignElements": "Assigned Variables", "dateAndTime": { @@ -451,6 +458,9 @@ "environmentVariables": { "title": "Environment Variables" }, + "apiResponses": { + "title": "API Responses" + }, "helpers": { "title": "Tools", "map": "Change items", diff --git a/GUI/src/i18n/et/common.json b/GUI/src/i18n/et/common.json index 1b6b197cc..f5ddf2cfa 100644 --- a/GUI/src/i18n/et/common.json +++ b/GUI/src/i18n/et/common.json @@ -330,7 +330,8 @@ "elementNameAlreadyExistsMessage": "Elementi sama nimega element juba eksisteerib" }, "popup": { - "unsavedChanges": "Sul on salvestamata muudatusi. Kas soovid kindlasti lahkuda? Salvestamata muudatused lähevad kaotsi." + "unsavedChanges": "Sul on salvestamata muudatusi. Kas soovid kindlasti lahkuda? Salvestamata muudatused lähevad kaotsi.", + "saveAndContinue": "Salvesta ja jätka" }, "titleRequired": "Pealkiri on kohustuslik", "chooseMemorySlots": "Vali mälukohad" @@ -368,7 +369,10 @@ "targetService": "Sihtteenус", "selectService": "Vali teenus...", "noActiveServices": "Aktiivseid teenuseid pole saadaval", - "parameters": "Parameetrid" + "parameters": "Parameetrid", + "navigateToService": "Ava see teenus", + "deletedService": "Teenus {{serviceName}} on kustutatud ja seda ei saa enam avada", + "alreadyOnService": "Sa vaatad juba seda teenust" } }, "popup": { @@ -419,12 +423,18 @@ "selectBranchTitle": "Vali haru", "emptyBranchesMessage": "Sellel valikvastuse küsimusel on {{count}} tühja haru. Millisele harule soovid ühendada?" }, + "condition": { + "emptyPathsMessage": "Sellel tingimusliku sõlmel on {{count}} tühja teed. Millisele teele soovid ühendada?" + }, "previousVariables": { "assignElements": "Määratud Väärtused", "noName": "", "environmentVariables": { "title": "Keskkonnamuutujad" }, + "apiResponses": { + "title": "API vastused" + }, "dateAndTime": { "title": "Kuupäev ja kellaaeg", "base": "Põhi", diff --git a/GUI/src/pages/ServiceFlowPage.tsx b/GUI/src/pages/ServiceFlowPage.tsx index 2ef300114..842a936d3 100644 --- a/GUI/src/pages/ServiceFlowPage.tsx +++ b/GUI/src/pages/ServiceFlowPage.tsx @@ -29,6 +29,7 @@ const ServiceFlowPage: FC = () => { if (!id) { await Promise.all([ useServiceStore.getState().loadStepPreferences(), + useServiceStore.getState().loadNavigableServiceIds(), useServiceStore.getState().loadAllEndpoints( false, 1, @@ -41,7 +42,11 @@ const ServiceFlowPage: FC = () => { } setLoading(true); - await Promise.all([useServiceStore.getState().loadService(id), useServiceStore.getState().loadStepPreferences()]); + await Promise.all([ + useServiceStore.getState().loadService(id), + useServiceStore.getState().loadStepPreferences(), + useServiceStore.getState().loadNavigableServiceIds(), + ]); setLoading(false); }; diff --git a/GUI/src/resources/api-constants.ts b/GUI/src/resources/api-constants.ts index a6c2af4d9..b971576a6 100644 --- a/GUI/src/resources/api-constants.ts +++ b/GUI/src/resources/api-constants.ts @@ -16,9 +16,10 @@ export const changeServiceStatus = (): string => `${baseUrl}/services/status`; export const createNewService = (): string => `${baseUrl}/services/add`; export const testService = (state: ServiceState, serviceName: string): string => `${baseUrl}/services/${state.toLowerCase()}/${serviceName}`; +export const getNewNonce = (): string => `${baseUrl}/get-new-nonce`; export const editService = (id: string): string => `${baseUrl}/services/edit?id=${id}`; export const getServicesList = (): string => `${baseUrl}/services`; -export const getActiveServicesList = (): string => `${baseUrl}/active-services`; +export const getNavigableServicesList = (): string => `${baseUrl}/navigable-services`; export const getConnectionRequests = (): string => `${baseUrl}/services/connection-requests`; export const getAvailableIntents = (): string => `${baseUrl}/services/available-intents`; export const jsonToYml = (): string => `${baseUrl}/saveJsonToYml`; diff --git a/GUI/src/services/service-builder.test.ts b/GUI/src/services/service-builder.test.ts index b55732f27..91378380c 100644 --- a/GUI/src/services/service-builder.test.ts +++ b/GUI/src/services/service-builder.test.ts @@ -1,7 +1,10 @@ +import { Edge, Node } from '@xyflow/react'; +import { StepType } from 'types'; import { NodeDataProps } from 'types/service-flow'; import { describe, expect, it, vi } from 'vitest'; import { + getYamlContent, validateAssign, validateCondition, validateDynamicChoices, @@ -269,3 +272,107 @@ describe('Validation Functions', () => { }); }); }); + +describe('Nonce step injection', () => { + const baseNodeData = { + onDelete: vi.fn(), + onEdit: vi.fn(), + type: 'custom', + readonly: false, + childrenCount: 0, + setClickedNode: vi.fn(), + }; + + const buildEndpointNode = (id: string, label: string, headerName: string): Node => ({ + id, + type: 'custom', + position: { x: 0, y: 0 }, + data: { + ...baseNodeData, + label, + stepType: StepType.UserDefined, + endpoint: { + endpointId: id, + name: label, + definitions: [ + { + id: `${id}-def`, + label, + path: '/back-up-removable-chats', + methodType: 'post', + type: 'custom', + dataType: 'custom', + supported: true, + isSelected: true, + url: '[#CHATBOT_RUUTER_PRIVATE]/chats/back-up-removable-chats', + headers: { + variables: [{ id: 'h1', name: headerName, type: 'string', value: 'placeholder' }], + rawData: {}, + }, + }, + ], + }, + }, + }); + + it('inserts a get-new-nonce step before an endpoint sending x-ruuter-nonce, and points the previous step at it', () => { + const endpointNode = buildEndpointNode('node-1', 'Backup Conversations', 'x-ruuter-nonce'); + const nextNode = buildEndpointNode('node-2', 'Empty Messages', 'content-type'); + const nodes: Node[] = [endpointNode, nextNode]; + const edges: Edge[] = [{ id: 'e1', source: 'node-1', target: 'node-2' }]; + + const result = getYamlContent(nodes, edges, 'test_service', '', false); + + expect(result.prepare.next).toBe('backup_conversations_get_new_nonce'); + + expect(result.backup_conversations_get_new_nonce).toEqual({ + call: 'http.post', + args: { url: '[#SERVICE_TRAINING_RESQL]/get-new-nonce' }, + result: 'backup_conversations_nonce', + next: 'backup_conversations', + }); + + expect(result.backup_conversations.args.headers['x-ruuter-nonce']).toBe( + '${backup_conversations_nonce.response.body[0].nonce}', + ); + + // Ruuter resolves ${var.response...} against whatever already ran by that point in the + // YAML, so the nonce-fetch step must be declared before the step that consumes its result. + const keys = Object.keys(result as Record); + expect(keys.indexOf('backup_conversations_get_new_nonce')).toBeLessThan(keys.indexOf('backup_conversations')); + }); + + it('does not inject a nonce step when no x-ruuter-nonce header is present', () => { + const endpointNode = buildEndpointNode('node-1', 'Backup Conversations', 'content-type'); + const nextNode = buildEndpointNode('node-2', 'Empty Messages', 'content-type'); + const nodes: Node[] = [endpointNode, nextNode]; + const edges: Edge[] = [{ id: 'e1', source: 'node-1', target: 'node-2' }]; + + const result = getYamlContent(nodes, edges, 'test_service', '', false); + + expect(result.backup_conversations_get_new_nonce).toBeUndefined(); + expect(result.prepare.next).toBe('backup_conversations'); + }); + + it('gives each nonce-requiring endpoint its own step and result variable', () => { + const firstEndpoint = buildEndpointNode('node-1', 'Backup Conversations', 'x-ruuter-nonce'); + const secondEndpoint = buildEndpointNode('node-2', 'Empty Messages', 'x-ruuter-nonce'); + const nodes: Node[] = [firstEndpoint, secondEndpoint]; + const edges: Edge[] = [{ id: 'e1', source: 'node-1', target: 'node-2' }]; + + const result = getYamlContent(nodes, edges, 'test_service', '', false); + + expect(result.backup_conversations.next).toBe('empty_messages_get_new_nonce'); + expect(result.empty_messages_get_new_nonce).toEqual({ + call: 'http.post', + args: { url: '[#SERVICE_TRAINING_RESQL]/get-new-nonce' }, + result: 'empty_messages_nonce', + next: 'empty_messages', + }); + const keys = Object.keys(result as Record); + expect(keys.indexOf('backup_conversations_get_new_nonce')).toBeLessThan(keys.indexOf('backup_conversations')); + expect(keys.indexOf('empty_messages_get_new_nonce')).toBeLessThan(keys.indexOf('empty_messages')); + + expect(result.empty_messages.args.headers['x-ruuter-nonce']).toBe('${empty_messages_nonce.response.body[0].nonce}'); + }); +}); diff --git a/GUI/src/services/service-builder.ts b/GUI/src/services/service-builder.ts index 6cfef2451..259489af6 100644 --- a/GUI/src/services/service-builder.ts +++ b/GUI/src/services/service-builder.ts @@ -1,9 +1,9 @@ import { Edge, Node } from '@xyflow/react'; import { AxiosError } from 'axios'; -import { Group, Rule } from 'components/FlowElementsPopup/RuleBuilder/types'; +import { Group, GroupOrRule, GroupType, Rule } from 'components/FlowElementsPopup/RuleBuilder/types'; import { format } from 'date-fns'; import i18next, { t } from 'i18next'; -import { NodeHtmlMarkdown } from 'node-html-markdown'; +import { NodeHtmlMarkdown, PostProcessResult, TranslatorConfigObject } from 'node-html-markdown'; import { createNewService, editService } from 'resources/api-constants'; import useServiceStore from 'store/new-services.store'; import useToastStore from 'store/toasts.store'; @@ -22,13 +22,31 @@ import { import api from '../services/api-dev'; -const htmlToMarkdown = new NodeHtmlMarkdown({ - textReplace: [ - [/\\_/g, '_'], - [/\\\[/g, '['], - [/\\\]/g, ']'], - ], -}); +const customTranslators: TranslatorConfigObject = { + li: ({ options: { bulletMarker }, listKind, listItemNumber }) => ({ + prefix: listKind === 'OL' && listItemNumber !== undefined ? `${listItemNumber}\\. ` : `${bulletMarker} `, + surroundingNewlines: 1, + postprocess: ({ content }) => + content.trim() === '' + ? PostProcessResult.RemoveNode + : content + .trim() + .replace(/([^\r\n])(?:\r?\n)+/g, '$1 \n') + .replace(/(\S)[^\S\r\n]+$/gm, '$1 '), + }), +}; + +const htmlToMarkdown = new NodeHtmlMarkdown( + { + bulletMarker: '•', + textReplace: [ + [/\\_/g, '_'], + [/\\\[/g, '['], + [/\\\]/g, ']'], + ], + }, + customTranslators, +); /** * Normalises MCQ button payloads on all MultiChoiceQuestion nodes. @@ -234,37 +252,37 @@ const buildConditionString = (group: any, assignedVariableNames: Set): s return isNumericString(rawField) ? rawField : `"${rawField}"`; }; + const buildRuleTerm = (rule: Rule): string => { + const rawField = rule.field.replaceAll('${', '').replaceAll('}', ''); + const absoluteValue = removeWrapperQuotes(rule.value.replaceAll('${', '').replaceAll('}', '')); + const value = formatField(absoluteValue); + const field = formatField(rawField); + return `${field} ${rule.operator} ${value}`; + }; + if ('children' in group) { const subgroup = group as Group; if (subgroup.children.length === 0) { return ''; } - const conditions = subgroup.children.map((child) => { - if ('children' in child) { - return `(${buildConditionString(child, assignedVariableNames)})`; - } else { - const rule = child; - const rawField = rule.field.replaceAll('${', '').replaceAll('}', ''); - const absoluteValue = removeWrapperQuotes(rule.value.replaceAll('${', '').replaceAll('}', '')); - const value = formatField(absoluteValue); - const field = formatField(rawField); - return `${field} ${rule.operator} ${value}`; - } - }); + const legacyType: GroupType = subgroup.type ?? 'and'; - if (subgroup.not) { - return `!(${subgroup.type === 'and' ? conditions.join(' && ') : conditions.join(' || ')})`; - } else { - return subgroup.type === 'and' ? conditions.join(' && ') : conditions.join(' || '); - } + const combined = subgroup.children.reduce((accumulated: string, child: GroupOrRule, index: number) => { + const term = + 'children' in child ? `(${buildConditionString(child, assignedVariableNames)})` : buildRuleTerm(child as Rule); + const signedTerm = child.connectorNot ? `!(${term})` : term; + + if (index === 0) return signedTerm; + + const connector = child.connector ?? legacyType; + const operator = connector === 'and' ? '&&' : '||'; + return `${accumulated} ${operator} ${signedTerm}`; + }, ''); + + return subgroup.not ? `!(${combined})` : combined; } else { - const rule = group as Rule; - const rawField = rule.field.replaceAll('${', '').replaceAll('}', ''); - const absoluteValue = removeWrapperQuotes(rule.value.replaceAll('${', '').replaceAll('}', '')); - const value = formatField(absoluteValue); - const field = formatField(rawField); - return `${field} ${rule.operator} ${value}`; + return buildRuleTerm(group as Rule); } }; @@ -385,7 +403,10 @@ async function saveService( type: 'POST', content: content, isCommon, - structure: JSON.stringify({ edges, nodes }), + structure: JSON.stringify({ + edges: edges.map(({ selected: _selected, ...edge }) => edge), + nodes: nodes.map(({ selected: _selected, ...node }) => node), + }), updateServiceDb: updateServiceDb, state: status, }, @@ -484,7 +505,14 @@ export function getYamlContent( accepts: 'json', returns: 'json', namespace: 'service', - allowList: { + allowlist: { + header: [ + { + field: 'x-ruuter-nonce', + type: 'string', + description: 'The nonce for the request', + }, + ], body: [ { field: 'chatId', @@ -519,6 +547,8 @@ export function getYamlContent( next: firstNode ? toSnakeCase(firstNode.data.label?.toString() ?? 'format_messages') : 'format_messages', }); + const nonceStepsNeeded: string[] = []; + try { allRelations.forEach((r) => { const [parentNodeId, childNodeId] = r.split(','); @@ -543,7 +573,7 @@ export function getYamlContent( } if (parentNode.data.stepType === StepType.Condition) { - return handleConditionStep(allRelations, parentNodeId, nodes, parentNode, finishedFlow, parentStepName); + return handleConditionStep(allRelations, parentNodeId, nodes, parentNode, finishedFlow, parentStepName, edges); } if (parentNode.data.stepType === StepType.Input) { @@ -559,7 +589,7 @@ export function getYamlContent( } if (parentNode.data.stepType === StepType.UserDefined) { - return handleEndpointStep(parentNode, finishedFlow, parentStepName, childNode); + return handleEndpointStep(parentNode, finishedFlow, parentStepName, childNode, nonceStepsNeeded); } if (parentNode.data.stepType === StepType.JumpToService) { @@ -577,6 +607,8 @@ export function getYamlContent( } } + nonceStepsNeeded.forEach((stepName) => injectNonceStep(finishedFlow, stepName)); + finishedFlow.set('format_messages', { call: 'http.post', args: { @@ -713,13 +745,15 @@ function replaceSpacesOutsideTags(input: string, placeholder: string): string { } function toMarkdownMessage(raw: string): string { - const spacePlaceholder = '___SPACE___'; + const spacePlaceholder = ''; + const leadingSpacePlaceholderRun = new RegExp(`^${spacePlaceholder}+`, 'gm'); const withPlaceholders = replaceSpacesOutsideTags( decodeHtmlEntities(raw).replaceAll('{{', '${').replaceAll('}}', '}'), spacePlaceholder, ); const markdown = htmlToMarkdown .translate(withPlaceholders) + .replaceAll(leadingSpacePlaceholderRun, (match) => '\u00A0'.repeat(match.length)) .replaceAll(spacePlaceholder, ' ') .replaceAll(/\\([-~>[\]_*#().!`=<\\])/g, String.raw`\\$1`); @@ -752,13 +786,9 @@ function handleConditionStep( parentNode: Node, finishedFlow: Map, parentStepName: string, + edges: Edge[], ) { const conditionRelations: string[] = allRelations.filter((r) => r.startsWith(parentNodeId)); - const firstChildNode = conditionRelations[0].split(',')[1]; - const secondChildNode = conditionRelations[1].split(',')[1]; - - const firstChild = nodes.find((node) => node.id === firstChildNode); - const secondChild = nodes.find((node) => node.id === secondChildNode); const rulesChildren = Array.isArray(parentNode.data.rules?.children) ? parentNode.data.rules.children : []; const invalidRulesExist = hasInvalidRules(rulesChildren); @@ -768,15 +798,25 @@ function handleConditionStep( throw new Error(i18next.t('toast.missing-condition-rules') ?? 'Error'); } + const outgoingEdges = edges.filter((e) => e.source === parentNodeId); + const successEdge = outgoingEdges.find((e) => e.label === 'Success') ?? outgoingEdges[0]; + const failureEdge = outgoingEdges.find((e) => e.label === 'Failure') ?? outgoingEdges[1]; + + const successChildId = successEdge?.target ?? conditionRelations[0]?.split(',')[1]; + const failureChildId = failureEdge?.target ?? conditionRelations[1]?.split(',')[1]; + + const successChild = nodes.find((node) => node.id === successChildId); + const failureChild = nodes.find((node) => node.id === failureChildId); + const assignedVariableNames = getAssignedVariableNames(nodes); finishedFlow.set(parentStepName, { switch: [ { condition: `\${${buildConditionString(parentNode.data.rules, assignedVariableNames)}}`, - next: toSnakeCase(firstChild?.data?.label ?? '') ?? '', + next: toSnakeCase(successChild?.data?.label ?? '') ?? '', }, ], - next: toSnakeCase(secondChild?.data?.label ?? '') ?? '', + next: toSnakeCase(failureChild?.data?.label ?? '') ?? '', }); } @@ -824,6 +864,7 @@ function handleEndpointStep( finishedFlow: Map, parentStepName: string, childNode: Node | undefined, + nonceStepsNeeded: string[], ) { const endpointDefinition = parentNode.data.endpoint?.definitions[0]; const paramsVariables = endpointDefinition?.params?.variables; @@ -851,6 +892,14 @@ function handleEndpointStep( applyEndpointHeaders(stepConfig, headersVariables); finishedFlow.set(parentStepName, stepConfig); + + if ( + Object.keys((stepConfig.args.headers ?? {}) as Record).some( + (key) => key.toLowerCase() === 'x-ruuter-nonce', + ) + ) { + nonceStepsNeeded.push(parentStepName); + } } function hasNonEqualOperatorParam(param: any): boolean { @@ -947,6 +996,62 @@ function applyEndpointHeaders(stepConfig: any, headersVariables: any[] | undefin } } +function injectNonceStep(finishedFlow: Map, stepName: string) { + const step = finishedFlow.get(stepName); + const headers = step?.args?.headers; + if (!headers) return; + + const nonceHeaderKey = Object.keys(headers as Record).find( + (key) => key.toLowerCase() === 'x-ruuter-nonce', + ); + if (!nonceHeaderKey) return; + + const nonceStepName = `${stepName}_get_new_nonce`; + const nonceResultName = `${stepName}_nonce`; + + headers[nonceHeaderKey] = `\${${nonceResultName}.response.body[0].nonce}`; + + redirectReferencesTo(finishedFlow, stepName, nonceStepName); + + insertStepBefore(finishedFlow, stepName, nonceStepName, { + call: 'http.post', + args: { + url: '[#SERVICE_TRAINING_RESQL]/get-new-nonce', + }, + result: nonceResultName, + next: stepName, + }); +} + +function insertStepBefore(finishedFlow: Map, beforeKey: string, newKey: string, newValue: any) { + const entries = Array.from(finishedFlow.entries()); + finishedFlow.clear(); + for (const [key, value] of entries) { + if (key === beforeKey) { + finishedFlow.set(newKey, newValue); + } + finishedFlow.set(key, value); + } +} + +function redirectReferencesTo(finishedFlow: Map, targetStepName: string, newStepName: string) { + finishedFlow.forEach((step, stepName) => { + if (stepName === targetStepName) return; + + if (step?.next === targetStepName) { + step.next = newStepName; + } + + if (Array.isArray(step?.switch)) { + step.switch.forEach((branch: any) => { + if (branch?.next === targetStepName) { + branch.next = newStepName; + } + }); + } + }); +} + function handleMultiChoiceQuestion( finishedFlow: Map, parentStepName: string, @@ -980,6 +1085,8 @@ function handleJumpToServiceStep(parentNode: Node, finishedFlow: template: '[#SERVICE_PROJECT_LAYER]/jump-to-service', requestType: 'templates', body: { + chatId: "${chatId ?? ''}", + authorId: "${authorId ?? ''}", serviceName: parentNode.data.jumpToService?.serviceName ?? '', input: (parentNode.data.jumpToService?.input ?? []).map((e: Assign) => normalizeAssignValue(e.value)), }, @@ -1072,6 +1179,8 @@ const getTemplateDataFromNode = (node: Node): { templateName: string; body?: any return { templateName: '[#SERVICE_PROJECT_LAYER]/jump-to-service', body: { + chatId: "${chatId ?? ''}", + authorId: "${authorId ?? ''}", serviceName: node.data.jumpToService?.serviceName ?? '', input: (node.data.jumpToService?.input ?? []).map((e: Assign) => normalizeAssignValue(e.value)), }, diff --git a/GUI/src/services/service-tester.test.ts b/GUI/src/services/service-tester.test.ts index 4499b4927..e900acc3e 100644 --- a/GUI/src/services/service-tester.test.ts +++ b/GUI/src/services/service-tester.test.ts @@ -9,6 +9,7 @@ import { clearPreviousTestStates, executeService, executeServiceTest, + fetchNonce, getInvalidNodes, handleTestError, hasResponseData, @@ -28,12 +29,14 @@ vi.mock('i18next', () => ({ vi.mock('./api', () => ({ default: { post: vi.fn(), + get: vi.fn(), }, createApiInstance: vi.fn(), })); vi.mock('resources/api-constants', () => ({ testService: vi.fn(), + getNewNonce: vi.fn(), })); // Mock dependencies for handleTestError @@ -715,11 +718,13 @@ describe('executeServiceTest', () => { const state = ServiceState.Active; const name = 'test-service'; const input = 'test-input'; + const nonce = 'test-nonce'; - await executeServiceTest(headerValue, state, name, input); + await executeServiceTest(headerValue, state, name, input, nonce); expect(mockCreateApiInstance).toHaveBeenCalledWith({ 'x-ruuter-testing': headerValue, + 'x-ruuter-nonce': nonce, }); }); @@ -728,8 +733,9 @@ describe('executeServiceTest', () => { const state = ServiceState.Active; const name = 'test-service'; const input = 'test-input'; + const nonce = 'test-nonce'; - await executeServiceTest(headerValue, state, name, input); + await executeServiceTest(headerValue, state, name, input, nonce); expect(mockTestService).toHaveBeenCalledWith(state, name); }); @@ -739,9 +745,10 @@ describe('executeServiceTest', () => { const state = ServiceState.Active; const name = 'test-service'; const input = 'test-input'; + const nonce = 'test-nonce'; const expectedEndpoint = '/test-endpoint'; - await executeServiceTest(headerValue, state, name, input); + await executeServiceTest(headerValue, state, name, input, nonce); expect(mockPost).toHaveBeenCalledWith(expectedEndpoint, { input }); }); @@ -751,16 +758,40 @@ describe('executeServiceTest', () => { const state = ServiceState.Active; const name = 'test-service'; const input = 'test-input'; + const nonce = 'test-nonce'; const expectedResponse = { success: true, data: 'test-data' }; mockPost.mockResolvedValue(expectedResponse); - const result = await executeServiceTest(headerValue, state, name, input); + const result = await executeServiceTest(headerValue, state, name, input, nonce); expect(result).toBe(expectedResponse); }); }); +describe('fetchNonce', () => { + let mockApiGet: ReturnType; + let mockGetNewNonce: ReturnType; + + beforeEach(async () => { + vi.clearAllMocks(); + mockApiGet = vi.mocked((await import('./api')).default.get); + mockGetNewNonce = vi.mocked((await import('resources/api-constants')).getNewNonce); + + mockGetNewNonce.mockReturnValue('/get-new-nonce'); + }); + + it('should call getNewNonce and return the nonce from the response', async () => { + mockApiGet.mockResolvedValue({ data: 'abc123' }); + + const result = await fetchNonce(); + + expect(mockGetNewNonce).toHaveBeenCalled(); + expect(mockApiGet).toHaveBeenCalledWith('/get-new-nonce'); + expect(result).toBe('abc123'); + }); +}); + describe('updateNodeTestState', () => { it('should update testingPassed for the specified node', () => { const mockServiceStore = { @@ -1231,11 +1262,12 @@ describe('executeService', () => { const state = ServiceState.Active; const name = 'test-service'; const input = 'test-input'; + const nonce = 'test-nonce'; - await executeService(state, name, input); + await executeService(state, name, input, nonce); expect(mockTestService).toHaveBeenCalledWith(state, name); - expect(mockApi).toHaveBeenCalledWith('/test-endpoint', { input }); + expect(mockApi).toHaveBeenCalledWith('/test-endpoint', { input }, { headers: { 'x-ruuter-nonce': nonce } }); }); }); @@ -1265,4 +1297,14 @@ describe('addSuccessMessages', () => { expect(mockAddBotMessage).toHaveBeenCalledWith('Test response content', undefined); expect(mockAddSuccess).toHaveBeenCalledWith('chat.service-test-success'); }); + + it('should not throw and should skip the bot message when the response array is empty', () => { + const responseData = { + response: [], + }; + + expect(() => addSuccessMessages(responseData)).not.toThrow(); + expect(mockAddBotMessage).not.toHaveBeenCalled(); + expect(mockAddSuccess).toHaveBeenCalledWith('chat.service-test-success'); + }); }); diff --git a/GUI/src/services/service-tester.ts b/GUI/src/services/service-tester.ts index bb2d4a3f8..8d45748b7 100644 --- a/GUI/src/services/service-tester.ts +++ b/GUI/src/services/service-tester.ts @@ -1,6 +1,6 @@ import { Node } from '@xyflow/react'; import { t } from 'i18next'; -import { testService } from 'resources/api-constants'; +import { getNewNonce, testService } from 'resources/api-constants'; import useServiceStore, { ServiceStoreState } from 'store/new-services.store'; import useTestServiceStore from 'store/test-services.store'; import { NodeDataProps } from 'types/service-flow'; @@ -43,9 +43,11 @@ export const runServiceTest = async (input: string, serviceName?: string) => { const stateToUse = state == ServiceState.Ready ? ServiceState.Draft : state; try { - await executeServiceTest(headerValue, stateToUse, nameToUse, input.split(',')); + const testNonce = await fetchNonce(); + await executeServiceTest(headerValue, stateToUse, nameToUse, input.split(','), testNonce); - const response = await executeService(stateToUse, nameToUse, input.split(',')); + const runNonce = await fetchNonce(); + const response = await executeService(stateToUse, nameToUse, input.split(','), runNonce); addSuccessMessages(response.data); } catch (error) { @@ -53,6 +55,11 @@ export const runServiceTest = async (input: string, serviceName?: string) => { } }; +export const fetchNonce = async (): Promise => { + const response = await api.get(getNewNonce()); + return response.data; +}; + export function getInvalidNodes(nodes: Node[]): { label: string; error: string }[] { const invalidNodes: { label: string; error: string }[] = []; @@ -122,9 +129,16 @@ export const clearPreviousTestStates = (serviceStore: ServiceStoreState) => { ); }; -export const executeServiceTest = async (headerValue: string, state: ServiceState, name: string, input: string[]) => { +export const executeServiceTest = async ( + headerValue: string, + state: ServiceState, + name: string, + input: string[], + nonce: string, +) => { const testApi = createApiInstance({ 'x-ruuter-testing': headerValue, + 'x-ruuter-nonce': nonce, }); return testApi.post(testService(state, name), { input }); }; @@ -213,13 +227,15 @@ export function translateError(error: ServiceTestError, nodeLabel: string): Reco return translateObjectKeys(translatedError, 'chat.service-test-error'); } -export const executeService = async (state: ServiceState, name: string, input: string[]) => { - return api.post(testService(state, name), { input }); +export const executeService = async (state: ServiceState, name: string, input: string[], nonce: string) => { + return api.post(testService(state, name), { input }, { headers: { 'x-ruuter-nonce': nonce } }); }; export const addSuccessMessages = (responseData: ServiceResponse): void => { - const res = responseData.response[0]; + const res = responseData.response?.[0]; const store = useTestServiceStore.getState(); - store.addBotMessage(res.content, res.buttons); + if (res) { + store.addBotMessage(res.content, res.buttons); + } store.addSuccess('chat.service-test-success'); }; diff --git a/GUI/src/store/new-services.store.ts b/GUI/src/store/new-services.store.ts index 97d5c50b4..c684904cc 100644 --- a/GUI/src/store/new-services.store.ts +++ b/GUI/src/store/new-services.store.ts @@ -10,11 +10,12 @@ import { ReactFlowInstance, } from '@xyflow/react'; import { AxiosResponse } from 'axios'; -import { GroupOrRule } from 'components/FlowElementsPopup/RuleBuilder/types'; +import { Group } from 'components/FlowElementsPopup/RuleBuilder/types'; import i18next from 'i18next'; import { getAllEndpoints, getEndpointValidation, + getNavigableServicesList, getSecretVariables, getServiceById, getTaraAuthResponseVariables, @@ -49,6 +50,35 @@ import useTestServiceStore from './test-services.store'; import useToastStore from './toasts.store'; import api from '../services/api-dev'; +const HIGHLIGHT_CLASS_RE = /\b(node-highlighted|node-dimmed)\b/g; +const EDGE_HIGHLIGHT_CLASS_RE = /\b(edge-highlighted|edge-dimmed)\b/g; + +function stripNodeHighlight(node: Node): Node { + if (!node.className) return node; + const cleaned = node.className.replace(HIGHLIGHT_CLASS_RE, '').replace(/\s+/g, ' ').trim(); + return cleaned === node.className ? node : { ...node, className: cleaned || undefined }; +} + +function omitSelected({ selected: _selected, ...rest }: T): Omit { + return rest; +} + +function stripEdgeHighlight(edge: Edge): Edge { + const cleanedClassName = edge.className + ? edge.className.replace(EDGE_HIGHLIGHT_CLASS_RE, '').replace(/\s+/g, ' ').trim() + : edge.className; + const data = edge.data; + const hasHighlightData = !!data && ('isHighlighted' in data || 'isDimmed' in data); + + if (cleanedClassName === edge.className && !hasHighlightData) return edge; + + const rest = hasHighlightData + ? Object.fromEntries(Object.entries(data).filter(([k]) => k !== 'isHighlighted' && k !== 'isDimmed')) + : data; + + return { ...edge, className: cleanedClassName || undefined, data: rest }; +} + export interface ServiceStoreState { endpoints: EndpointData[]; name: string; @@ -65,13 +95,15 @@ export interface ServiceStoreState { isNewService: boolean; serviceState?: ServiceState; assignElements: Assign[]; - rules: GroupOrRule[]; + rules: Group | undefined; isYesNoQuestion: boolean; stepPreferences: string[]; endpointsResponseVariables: EndpointResponseVariable[]; + navigableServices: Map; + loadNavigableServiceIds: () => Promise; setIsYesNoQuestion: (value: boolean) => void; changeAssignNode: (assign: Assign[]) => void; - changeRulesNode: (rules: GroupOrRule[]) => void; + changeRulesNode: (rules: Group | undefined) => void; markAsNewService: () => void; unmarkAsNewService: () => void; setServiceId: (id: string) => void; @@ -232,10 +264,11 @@ const useServiceStore = create((set, get) => ({ isTestButtonVisible: false, isTestButtonEnabled: true, assignElements: [], - rules: [], + rules: undefined, isYesNoQuestion: false, stepPreferences: [], endpointsResponseVariables: [], + navigableServices: new Map(), history: [{ nodes: initialNodes, edges: initialEdges }], historyIndex: 0, setIsYesNoQuestion: (value: boolean) => set({ isYesNoQuestion: value }), @@ -337,7 +370,9 @@ const useServiceStore = create((set, get) => ({ variables.push(variable); }); - set({ endpointsResponseVariables: variables }); + const uniqueVariables = Array.from(new Map(variables.map((variable) => [variable.name, variable])).values()); + + set({ endpointsResponseVariables: uniqueVariables }); } catch (e) { console.error(e); } @@ -410,7 +445,7 @@ const useServiceStore = create((set, get) => ({ nodes: initialNodes, isTestButtonEnabled: true, assignElements: [], - rules: [], + rules: undefined, isYesNoQuestion: false, clickedNode: null, isTestButtonVisible: false, @@ -422,7 +457,7 @@ const useServiceStore = create((set, get) => ({ useTestServiceStore.getState().reset(); }, resetAssign: () => set({ assignElements: [] }), - resetRules: () => set({ rules: [], isYesNoQuestion: false }), + resetRules: () => set({ rules: undefined, isYesNoQuestion: false }), loadService: async (id, resetState, search) => { if (resetState === true) { get().resetState(); @@ -459,16 +494,18 @@ const useServiceStore = create((set, get) => ({ if (!endpoints || !Array.isArray(endpoints)) endpoints = []; nodes = nodes.map((node: any) => { - if (node.type !== 'custom') return node; - node.data = { - ...node.data, + const rest = omitSelected(stripNodeHighlight(node as Node)); + if (rest.type !== 'custom') return rest; + rest.data = { + ...rest.data, onDelete: get().onDelete, setClickedNode: get().setClickedNode, onEdit: get().handleNodeEdit, update: updateFlowInputRules, }; - return node; + return rest; }); + edges = edges.map((edge: Edge) => omitSelected(stripEdgeHighlight(edge))); /*The structuredClone approach failed with DataCloneError because flow nodes contain function references (onDelete, onEdit, setClickedNode, update), @@ -560,6 +597,16 @@ const useServiceStore = create((set, get) => ({ console.error('Failed to load step preferences:', error); } }, + loadNavigableServiceIds: async () => { + try { + const response = + await api.get<{ readonly serviceId: string; readonly name: string }[]>(getNavigableServicesList()); + const data = Array.isArray(response.data) ? response.data : []; + set({ navigableServices: new Map(data.map((s) => [s.serviceId, s.name])) }); + } catch (error) { + console.error('Failed to load navigable services:', error); + } + }, loadSecretVariables: async () => { const result = await api.get(getSecretVariables()); const data: { prod: string[]; test: string[] } = result.data; @@ -716,7 +763,7 @@ const useServiceStore = create((set, get) => ({ setClickedNode: (clickedNode) => set({ clickedNode }), onNodesChange: (changes: NodeChange[]) => { get().setNodes((prevNode) => { - const changedNodes = applyNodeChanges(changes, prevNode); + const changedNodes = applyNodeChanges(changes, prevNode).map(stripNodeHighlight); const newNodes = alignNodesInCaseAnyGotOverlapped(changes, changedNodes, get().edges); changes.forEach((change) => { if (change.type === 'add') { @@ -727,7 +774,7 @@ const useServiceStore = create((set, get) => ({ }); }, onEdgesChange: (changes: EdgeChange[]) => { - get().setEdges((eds) => applyEdgeChanges(changes, eds)); + get().setEdges((eds) => applyEdgeChanges(changes, eds).map(stripEdgeHighlight)); }, onNodeAdded: (_: Node) => { const cleanupGhostNodes = async () => { diff --git a/GUI/src/store/services.store.ts b/GUI/src/store/services.store.ts index 953769f11..70e3e4527 100644 --- a/GUI/src/store/services.store.ts +++ b/GUI/src/store/services.store.ts @@ -70,6 +70,7 @@ const useServiceListStore = create()( page_size: pagination.pageSize, sorting: sort, is_common: false, + search: '', }); const services = result.data.response[0].map?.((item: any) => ({ @@ -99,6 +100,7 @@ const useServiceListStore = create()( page_size: pagination.pageSize, sorting: sort, is_common: true, + search: '', }); const services = result.data.response[0].map?.((item: any) => ({ diff --git a/GUI/src/utils/conditional-flow-utils.ts b/GUI/src/utils/conditional-flow-utils.ts new file mode 100644 index 000000000..bad549c9d --- /dev/null +++ b/GUI/src/utils/conditional-flow-utils.ts @@ -0,0 +1,65 @@ +import { Edge, getIncomers, getOutgoers, Node } from '@xyflow/react'; +import { StepType } from 'types'; +import { McqEmptyBranch } from 'utils/mcq-flow-utils'; + +export const CONDITION_SOURCE_HANDLE_ID = 'condition-out'; +export const CONDITION_LABELS = ['Success', 'Failure'] as const; + +export const getEmptyConditionBranches = (conditionNodeId: string, nodes: Node[], edges: Edge[]): McqEmptyBranch[] => { + const conditionNode = nodes.find((n) => n.id === conditionNodeId); + if (!conditionNode || conditionNode.data?.stepType !== StepType.Condition) return []; + + const outgoing = edges.filter((e) => e.source === conditionNodeId); + + return CONDITION_LABELS.flatMap((label, handleIndex) => { + const edge = outgoing.find((e) => e.label === label); + if (!edge) return []; + + const target = nodes.find((n) => n.id === edge.target); + if (target?.type !== 'ghost') return []; + + return [{ edgeId: edge.id, label, ghostNodeId: edge.target, handleIndex }]; + }); +}; + +export const conditionHasEmptyBranches = (conditionNodeId: string, nodes: Node[], edges: Edge[]): boolean => + getEmptyConditionBranches(conditionNodeId, nodes, edges).length > 0; + +export const applyConditionBranchConnection = ({ + nodes, + edges, + conditionId, + targetId, + branch, +}: { + nodes: Node[]; + edges: Edge[]; + conditionId: string; + targetId: string; + branch: McqEmptyBranch; +}): { nodes: Node[]; edges: Edge[] } => { + let finalNodes = nodes.filter((n) => n.id !== branch.ghostNodeId); + let finalEdges = edges.filter((e) => e.id !== branch.edgeId); + + finalEdges = [ + ...finalEdges, + { + id: `${conditionId}->${targetId}-${branch.label}`, + source: conditionId, + target: targetId, + type: 'step', + label: branch.label, + animated: false, + deletable: true, + }, + ]; + + finalNodes = finalNodes.filter( + (node) => + node.type !== 'ghost' || + getIncomers(node, finalNodes, finalEdges).length > 0 || + getOutgoers(node, finalNodes, finalEdges).length > 0, + ); + + return { nodes: finalNodes, edges: finalEdges }; +}; diff --git a/GUI/src/utils/mcq-flow-utils.ts b/GUI/src/utils/mcq-flow-utils.ts index f3b7b4972..0f8df94af 100644 --- a/GUI/src/utils/mcq-flow-utils.ts +++ b/GUI/src/utils/mcq-flow-utils.ts @@ -11,18 +11,6 @@ export type McqEmptyBranch = { readonly handleIndex: number; }; -export const getMcqNodeIdFromConnection = ( - connection: Connection, - getNode: (id: string) => Node | undefined, -): string | null => { - const sourceNode = connection.source ? getNode(connection.source) : undefined; - const targetNode = connection.target ? getNode(connection.target) : undefined; - - if (sourceNode?.data?.stepType === StepType.MultiChoiceQuestion) return sourceNode.id; - if (targetNode?.data?.stepType === StepType.MultiChoiceQuestion) return targetNode.id; - return null; -}; - export const getMcqButtons = (mcqNode: Node): MultiChoiceQuestionButton[] => mcqNode.data?.multiChoiceQuestion?.buttons ?? []; @@ -79,7 +67,7 @@ export const applyMcqBranchConnection = ({ type: 'step', label: branch.label, animated: false, - deletable: false, + deletable: true, }, ]; @@ -114,10 +102,15 @@ export const applySimpleConnection = ({ let finalNodes = nodes; let finalEdges = edges; + let preservedLabel: string | undefined; if (ghostEdges.length > 0) { const ghostNodeIds = new Set(ghostEdges.map((edge) => edge.target)); finalEdges = edges.filter((edge) => !ghostEdges.includes(edge)); finalNodes = nodes.filter((node) => !ghostNodeIds.has(node.id)); + if (ghostEdges.length === 1) { + const label = ghostEdges[0].label; + if (typeof label === 'string' && label !== '+') preservedLabel = label; + } } finalEdges = [ @@ -127,6 +120,7 @@ export const applySimpleConnection = ({ source, target, type: 'step', + ...(preservedLabel === undefined ? {} : { label: preservedLabel }), }, ]; diff --git a/GUI/src/utils/service-navigation-utils.ts b/GUI/src/utils/service-navigation-utils.ts new file mode 100644 index 000000000..1f133670e --- /dev/null +++ b/GUI/src/utils/service-navigation-utils.ts @@ -0,0 +1,24 @@ +import { t } from 'i18next'; +import { NavigateFunction } from 'react-router-dom'; +import { ROUTES } from 'resources/routes-constants'; +import useServiceStore from 'store/new-services.store'; +import useToastStore from 'store/toasts.store'; + +export const navigateToService = (serviceId: string, navigate: NavigateFunction) => { + if (serviceId === useServiceStore.getState().serviceId) { + useToastStore.getState().info({ + title: t('serviceFlow.element.jumpToService.title'), + message: t('serviceFlow.element.jumpToService.alreadyOnService'), + }); + return; + } + + const target = ROUTES.replaceWithId(ROUTES.EDITSERVICE_ROUTE, serviceId); + + if (useServiceStore.getState().hasUnsavedChanges) { + useServiceStore.getState().handleProgrammaticNavigation(target); + } else { + useServiceStore.getState().resetState(); + navigate(target); + } +}; diff --git a/bump-version.sh b/bump-version.sh deleted file mode 100755 index 077c15c8b..000000000 --- a/bump-version.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# This script is used to bump the version number based on the bump type provided to the current branch. - -# Check if the bump type is provided -if [ "$#" -ne 1 ]; then - echo "Usage: $0 {major|minor|patch}" - exit 1 -fi - -# Get the current branch name -current_branch=$(git branch --show-current) - -# Initialize variables -found_branch=false -bump_type=$1 - -# Read the environment content from the file -env_file=$( "release.env" -fi diff --git a/constants.ini b/constants.ini index cc109be4c..1269b08dd 100644 --- a/constants.ini +++ b/constants.ini @@ -4,6 +4,8 @@ SERVICE_RESQL=http://resql:8087/services SERVICE_USERS_RESQL=http://resql-users:8088/users +SERVICE_TRAINING_RESQL=http://resql-training:8083/training + SERVICE_DOCKER_INT=http://host.docker.internal:8080 SERVICE_OPENSEARCH=http://opensearch:9200 @@ -47,3 +49,5 @@ AZURE_SEARCH_INDEXER_NAME= AZURE_SEARCH_API_KEY= LLM_RUUTER_PUBLIC=http://ruuter-public:8086/rag-search + +AZURE_STORAGE_ENABLED=true diff --git a/docker-compose.yml b/docker-compose.yml index bafbf93f9..8796e458f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: - application.internalRequests.disabled=true - application.internalRequests.allowedIPs=127.0.0.1 - application.apiRequestTestingKey=voorshpellhappilo + - application.externalAuthAllowed=services/active/*,services/draft/*,services/inactive/* volumes: - ./DSL/Ruuter:/DSL - ./constants.ini:/app/constants.ini @@ -79,6 +80,23 @@ services: networks: - bykstack + resql_training: + container_name: resql-training + image: resql + environment: + - sqlms.datasources.[0].name=byk + - sqlms.datasources.[0].jdbcUrl=jdbc:postgresql://171.22.247.13:5434/train_db + - sqlms.datasources.[0].username=byk + - sqlms.datasources.[0].password=01234 + - logging.level.org.springframework.boot=INFO + - server.port=8083 + ports: + - 8083:8083 + volumes: + - ./DSL/Resql:/DSL + networks: + - bykstack + data-mapper: container_name: data-mapper image: data-mapper @@ -131,14 +149,14 @@ services: - REACT_APP_RUUTER_SERVICES_PATH=/Ruuter/services - REACT_APP_RUUTER_SERVICES_DIR_PATH=services - REACT_APP_CURRENT_VERSION=Version 1.0.0 - - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Bürokratt","en":"Burokratt"},"path":"/burokratt"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"API varamu","en":"API Registry"},"path":"/api-registry"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] + - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Bürokratt","en":"Burokratt"},"path":"/burokratt"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"API varamu","en":"API Registry"},"path":"/api-registry"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"knowledge-center","label":{"et":"Teadmuskeskus","en":"Knowledge Center"},"path":"/knowledge-center","children":[{"id":"rag-search","label":{"et":"Mudelid ja seadistused","en":"Models management"},"path":"/rag-search","children":[{"label":{"et":"Mudelite ühendused","en":"LLM connections"},"path":"/rag-search/llm-connections"},{"label":{"et":"Viiba Seaded","en":"Prompt Configurations"},"path":"/rag-search/prompt-configurations"},{"label":{"et":"Testi mudelit","en":"Test LLM"},"path":"/rag-search/test-llm"}]},{"id":"ckb","label":{"et":"Teadmusbaas","en":"Knowledge Base"},"path":"/ckb","children":[{"label":{"et":"Agentuur","en":"Agency"},"path":"/ckb/agency"},{"label":{"et":"Aruanded","en":"Reports"},"path":"/ckb/reports"},{"label":{"et":"API Integratsioonid","en":"API Integrations"},"path":"/ckb/api"}]}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] - REACT_APP_PROJECT_LAYER=services - REACT_APP_VALIDATIONS_ENABLED=FALSE - REACT_APP_INTENT_CREATION_PATH=http://localhost:3001/training/training/intents - REACT_APP_MULTI_CHOICE_QUESTION_MAX_BUTTONS=4 - REACT_APP_ENABLE_MULTI_DOMAIN=FALSE # # for production use this one: - # - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"hidden":true,"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"hidden":true,"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"hidden":true,"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"hidden":true,"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","hidden":true,"label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"hidden": false,"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","hidden":true,"label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] + # - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"hidden":true,"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"hidden":true,"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"hidden":true,"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"hidden":true,"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","hidden":true,"label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"knowledge-center","label":{"et":"Teadmuskeskus","en":"Knowledge Center"},"path":"/knowledge-center","children":[{"id":"rag-search","label":{"et":"Mudelid ja seadistused","en":"Models management"},"path":"/rag-search","children":[{"label":{"et":"Mudelite ühendused","en":"LLM connections"},"path":"/rag-search/llm-connections"},{"label":{"et":"Viiba Seaded","en":"Prompt Configurations"},"path":"/rag-search/prompt-configurations"},{"label":{"et":"Testi mudelit","en":"Test LLM"},"path":"/rag-search/test-llm"}]},{"id":"ckb","label":{"et":"Teadmusbaas","en":"Knowledge Base"},"path":"/ckb","children":[{"label":{"et":"Agentuur","en":"Agency"},"path":"/ckb/agency"},{"label":{"et":"Aruanded","en":"Reports"},"path":"/ckb/reports"},{"label":{"et":"API Integratsioonid","en":"API Integrations"},"path":"/ckb/api"}]}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Vestluste analüüs","en":"Chat analysis"},"path":"/chat-analysis"},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"hidden": false,"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","hidden":true,"label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] build: context: ./GUI dockerfile: Dockerfile.dev @@ -156,7 +174,7 @@ services: depends_on: - tim-postgresql environment: - - SECURITY_ALLOWLIST_JWT=ruuter,resql,resql_users,tim,tim-postgresql,node_server,data_mapper,gui_dev,127.0.0.1,::1 + - SECURITY_ALLOWLIST_JWT=ruuter,resql,resql_users,resql_training,tim,tim-postgresql,node_server,data_mapper,gui_dev,127.0.0.1,::1 - JWT_INTEGRATION_SIGNATURE_KEY_STORE_PASSWORD=defaultpassword ports: - 8085:8085 diff --git a/package.json b/package.json index ef252e2e8..93b1f3d86 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,6 @@ }, "scripts": { "prepare": "husky", - "changelog": "./generate-changelog.sh", - "sync-version": "./sync-version.sh", - "bump-patch": "./bump-version.sh patch", - "bump-minor": "./bump-version.sh minor", - "bump-major": "./bump-version.sh major" + "changelog": "./generate-changelog.sh" } } diff --git a/release.env b/release.env index 98d6ed2ed..404f0a6b8 100644 --- a/release.env +++ b/release.env @@ -1,19 +1,4 @@ -dev -MAJOR=1 -MINOR=1 -PATCH=0 - -test -MAJOR=1 -MINOR=1 -PATCH=0 - -stage -MAJOR=1 -MINOR=1 -PATCH=0 - main -MAJOR=1 -MINOR=1 -PATCH=0 +MAJOR=3 +MINOR=3 +PATCH=2 diff --git a/sync-version.sh b/sync-version.sh deleted file mode 100755 index c4a6db4d6..000000000 --- a/sync-version.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -# This script is used to sync the version number of the current branch with the previous branch. - -current_branch=$(git branch --show-current) -env_file="release.env" - -lines=() -while IFS= read -r line; do - lines+=("$line") -done < "$env_file" - -previous_version=() -found_previous_branch=0 - -for (( i=0; i<${#lines[@]}; i++ )); do - line="${lines[i]}" - - if [[ "$line" =~ ^([a-zA-Z0-9_]+)$ ]]; then - if [ "$line" == "$current_branch" ]; then - if [ "$found_previous_branch" -eq 1 ]; then - break - else - exit 0 - fi - fi - - found_previous_branch=1 - previous_version=() - fi - - if [[ "$line" =~ ^(MAJOR=|MINOR=|PATCH=) ]]; then - previous_version+=("$line") - fi -done - -if [ ${#previous_version[@]} -ne 0 ]; then - for (( i=0; i<${#lines[@]}; i++ )); do - if [[ "${lines[i]}" == "$current_branch" ]]; then - lines[i+1]="${previous_version[0]}" - lines[i+2]="${previous_version[1]}" - lines[i+3]="${previous_version[2]}" - break - fi - done - - printf "%s\n" "${lines[@]}" > "$env_file" -else - exit 0 -fi