diff --git a/.codespellrc b/.codespellrc deleted file mode 100644 index ffe730b747b..00000000000 --- a/.codespellrc +++ /dev/null @@ -1,7 +0,0 @@ -[codespell] -# Ref: https://github.com/codespell-project/codespell#using-a-config-file -skip = .git*,*.svg,i18n,*-lock.yaml,*.css,.codespellrc,migrations,*.js,*.map,*.mjs -check-hidden = true -# ignore all CamelCase and camelCase -ignore-regex = \b[A-Za-z][a-z]+[A-Z][a-zA-Z]+\b -ignore-words-list = tread diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 3ef625faef2..00000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,55 +0,0 @@ -version: 2 -updates: - # JavaScript/TypeScript dependencies (pnpm monorepo root) - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 10 - labels: - - "dependencies" - - "javascript" - groups: - minor-and-patch: - update-types: - - "minor" - - "patch" - - # Python dependencies - - package-ecosystem: "pip" - directory: "/apps/api" - schedule: - interval: "weekly" - open-pull-requests-limit: 5 - labels: - - "dependencies" - - "python" - groups: - minor-and-patch: - update-types: - - "minor" - - "patch" - - # GitHub Actions - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 5 - labels: - - "dependencies" - - "github-actions" - groups: - actions: - patterns: - - "*" - - # Docker - API - - package-ecosystem: "docker" - directory: "/apps/api" - schedule: - interval: "weekly" - open-pull-requests-limit: 5 - labels: - - "dependencies" - - "docker" diff --git a/.github/workflows/build-branch.yml b/.github/workflows/build-branch.yml index 087a012d40c..8ad71e7d68a 100644 --- a/.github/workflows/build-branch.yml +++ b/.github/workflows/build-branch.yml @@ -134,7 +134,7 @@ jobs: - id: checkout_files name: Checkout Files - uses: actions/checkout@v4 + uses: actions/checkout@v6 branch_build_push_admin: name: Build-Push Admin Docker Image @@ -142,7 +142,7 @@ jobs: needs: [branch_build_setup] steps: - name: Admin Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -164,7 +164,7 @@ jobs: needs: [branch_build_setup] steps: - name: Web Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -186,7 +186,7 @@ jobs: needs: [branch_build_setup] steps: - name: Space Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -208,7 +208,7 @@ jobs: needs: [branch_build_setup] steps: - name: Live Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -230,7 +230,7 @@ jobs: needs: [branch_build_setup] steps: - name: Backend Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -252,7 +252,7 @@ jobs: needs: [branch_build_setup] steps: - name: Proxy Build and Push - uses: makeplane/actions/build-push@v1.0.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -282,7 +282,7 @@ jobs: - branch_build_push_proxy steps: - name: Checkout Files - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Prepare AIO Assets id: prepare_aio_assets @@ -298,13 +298,13 @@ jobs: echo "AIO_BUILD_VERSION=${aio_version}" >> $GITHUB_OUTPUT - name: Upload AIO Assets - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: path: ./deployments/aio/community/dist name: aio-assets-dist - name: AIO Build and Push - uses: makeplane/actions/build-push@v1.1.0 + uses: makeplane/actions/build-push@v1.4.0 with: build-release: ${{ needs.branch_build_setup.outputs.build_release }} build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }} @@ -337,7 +337,7 @@ jobs: - branch_build_push_proxy steps: - name: Checkout Files - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Update Assets run: | @@ -352,7 +352,7 @@ jobs: # sed -i 's/APP_RELEASE=stable/APP_RELEASE='${REL_VERSION}'/g' deployments/cli/community/variables.env - name: Upload Assets - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: community-assets path: | @@ -381,7 +381,7 @@ jobs: REL_VERSION: ${{ needs.branch_build_setup.outputs.release_version }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Update Assets run: | @@ -391,12 +391,13 @@ jobs: - name: Create Release id: create_release - uses: softprops/action-gh-release@v2.1.0 + uses: softprops/action-gh-release@v2.6.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token with: tag_name: ${{ env.REL_VERSION }} name: ${{ env.REL_VERSION }} + target_commitish: ${{ github.sha }} draft: false prerelease: ${{ env.IS_PRERELEASE }} generate_release_notes: true diff --git a/.github/workflows/check-version.yml b/.github/workflows/check-version.yml index 855ee359fe2..e32581f2e2d 100644 --- a/.github/workflows/check-version.yml +++ b/.github/workflows/check-version.yml @@ -10,13 +10,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.head_ref }} fetch-depth: 0 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 - name: Get PR Branch version run: echo "PR_VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 6d63f54c4f8..a645c192ff3 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Initialize CodeQL uses: github/codeql-action/init@v4 diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml deleted file mode 100644 index ca87dc9347f..00000000000 --- a/.github/workflows/codespell.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Codespell configuration is within .codespellrc ---- -name: Codespell - -on: - push: - branches: [preview] - pull_request: - branches: [preview] - -permissions: - contents: read - -jobs: - codespell: - name: Check for spelling errors - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Annotate locations with typos - uses: codespell-project/codespell-problem-matcher@v1 - - name: Codespell - uses: codespell-project/actions-codespell@v2 diff --git a/.github/workflows/copyright-check.yml b/.github/workflows/copyright-check.yml index 1e20ed2eeb6..b406833a827 100644 --- a/.github/workflows/copyright-check.yml +++ b/.github/workflows/copyright-check.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v6 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version: "1.22" diff --git a/.github/workflows/feature-deployment.yml b/.github/workflows/feature-deployment.yml index dad3489dfec..c0740c517b4 100644 --- a/.github/workflows/feature-deployment.yml +++ b/.github/workflows/feature-deployment.yml @@ -48,7 +48,7 @@ jobs: - id: checkout_files name: Checkout Files - uses: actions/checkout@v4 + uses: actions/checkout@v6 full_build_push: runs-on: ubuntu-22.04 @@ -63,23 +63,23 @@ jobs: BUILDX_ENDPOINT: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }} steps: - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: driver: ${{ env.BUILDX_DRIVER }} version: ${{ env.BUILDX_VERSION }} endpoint: ${{ env.BUILDX_ENDPOINT }} - name: Check out the repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Build and Push to Docker Hub - uses: docker/build-push-action@v6.9.0 + uses: docker/build-push-action@v7.0.0 with: context: . file: ./aio/Dockerfile-app @@ -112,7 +112,7 @@ jobs: sudo apt-get install -y python3-pip pip3 install awscli - name: Tailscale - uses: tailscale/github-action@v2 + uses: tailscale/github-action@v4 with: oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }} oauth-secret: ${{ secrets.TAILSCALE_OAUTH_SECRET }} diff --git a/.github/workflows/pull-request-build-lint-web-apps.yml b/.github/workflows/pull-request-build-lint-web-apps.yml index 6d67699231a..719f101187d 100644 --- a/.github/workflows/pull-request-build-lint-web-apps.yml +++ b/.github/workflows/pull-request-build-lint-web-apps.yml @@ -8,8 +8,6 @@ on: types: - "opened" - "synchronize" - - "ready_for_review" - - "review_requested" - "reopened" concurrency: @@ -46,7 +44,7 @@ jobs: run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Cache pnpm store - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} @@ -89,7 +87,7 @@ jobs: run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Cache pnpm store - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} @@ -97,7 +95,7 @@ jobs: pnpm-store-${{ runner.os }}- - name: Restore Turbo cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: .turbo key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }} @@ -112,7 +110,7 @@ jobs: run: pnpm turbo run build --affected - name: Save Turbo cache - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: .turbo key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }} @@ -146,7 +144,7 @@ jobs: run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Cache pnpm store - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} @@ -187,7 +185,7 @@ jobs: run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Cache pnpm store - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} @@ -195,7 +193,7 @@ jobs: pnpm-store-${{ runner.os }}- - name: Restore Turbo cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: .turbo key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }} diff --git a/.github/workflows/sync-repo-pr.yml b/.github/workflows/sync-repo-pr.yml deleted file mode 100644 index 548ccbf423f..00000000000 --- a/.github/workflows/sync-repo-pr.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Create PR on Sync - -on: - workflow_dispatch: - push: - branches: - - "sync/**" - -env: - CURRENT_BRANCH: ${{ github.ref_name }} - TARGET_BRANCH: "preview" # The target branch that you would like to merge changes like develop - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} # Personal access token required to modify contents and workflows - ACCOUNT_USER_NAME: ${{ vars.ACCOUNT_USER_NAME }} - ACCOUNT_USER_EMAIL: ${{ vars.ACCOUNT_USER_EMAIL }} - -jobs: - create_pull_request: - runs-on: ubuntu-latest - permissions: - pull-requests: write - contents: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Fetch all history for all branches and tags - - - name: Setup Git - run: | - git config user.name "$ACCOUNT_USER_NAME" - git config user.email "$ACCOUNT_USER_EMAIL" - - - name: Setup GH CLI and Git Config - run: | - type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y) - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg - sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null - sudo apt update - sudo apt install gh -y - - - name: Create PR to Target Branch - run: | - # get all pull requests and check if there is already a PR - PR_EXISTS=$(gh pr list --base $TARGET_BRANCH --head $CURRENT_BRANCH --state open --json number | jq '.[] | .number') - if [ -n "$PR_EXISTS" ]; then - echo "Pull Request already exists: $PR_EXISTS" - else - echo "Creating new pull request" - PR_URL=$(gh pr create --base $TARGET_BRANCH --head $CURRENT_BRANCH --title "${{ vars.SYNC_PR_TITLE }}" --body "") - echo "Pull Request created: $PR_URL" - fi diff --git a/.github/workflows/sync-repo.yml b/.github/workflows/sync-repo.yml deleted file mode 100644 index 5d6c72cb758..00000000000 --- a/.github/workflows/sync-repo.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Sync Repositories - -on: - workflow_dispatch: - push: - branches: - - preview - -env: - SOURCE_BRANCH_NAME: ${{ github.ref_name }} - -jobs: - sync_changes: - runs-on: ubuntu-22.04 - permissions: - pull-requests: write - contents: read - steps: - - name: Checkout Code - uses: actions/checkout@v4 - with: - persist-credentials: false - fetch-depth: 0 - - - name: Setup GH CLI - run: | - type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y) - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg - sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null - sudo apt update - sudo apt install gh -y - - - name: Push Changes to Target Repo - env: - GH_TOKEN: ${{ secrets.ACCESS_TOKEN }} - run: | - TARGET_REPO="${{ vars.SYNC_TARGET_REPO }}" - TARGET_BRANCH="${{ vars.SYNC_TARGET_BRANCH_NAME }}" - SOURCE_BRANCH="${{ env.SOURCE_BRANCH_NAME }}" - - git checkout $SOURCE_BRANCH - git remote add target-origin-a "https://$GH_TOKEN@github.com/$TARGET_REPO.git" - git push target-origin-a $SOURCE_BRANCH:$TARGET_BRANCH diff --git a/README.md b/README.md index d2117149da6..74688cd92c4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

WebsiteForum • - Twitter • + XDocumentation

diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index 63b30a1c31d..19ad2c392a1 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -13,7 +13,7 @@ RUN corepack enable pnpm FROM base AS builder -RUN pnpm add -g turbo@2.8.12 +RUN pnpm add -g turbo@2.9.4 COPY . . diff --git a/apps/admin/app/(all)/(dashboard)/general/form.tsx b/apps/admin/app/(all)/(dashboard)/general/form.tsx index 0b402b76c7a..e38d7848eb7 100644 --- a/apps/admin/app/(all)/(dashboard)/general/form.tsx +++ b/apps/admin/app/(all)/(dashboard)/general/form.tsx @@ -16,8 +16,6 @@ import { Input, ToggleSwitch } from "@plane/ui"; import { ControllerInput } from "@/components/common/controller-input"; // hooks import { useInstance } from "@/hooks/store"; -// components -import { IntercomConfig } from "./intercom"; export interface IGeneralConfigurationForm { instance: IInstance; @@ -27,14 +25,13 @@ export interface IGeneralConfigurationForm { export const GeneralConfigurationForm = observer(function GeneralConfigurationForm(props: IGeneralConfigurationForm) { const { instance, instanceAdmins } = props; // hooks - const { instanceConfigurations, updateInstanceInfo, updateInstanceConfigurations } = useInstance(); + const { updateInstanceInfo } = useInstance(); // form data const { handleSubmit, control, formState: { errors, isSubmitting }, - watch, } = useForm>({ defaultValues: { instance_name: instance?.instance_name, @@ -45,17 +42,6 @@ export const GeneralConfigurationForm = observer(function GeneralConfigurationFo const onSubmit = async (formData: Partial) => { const payload: Partial = { ...formData }; - // update the intercom configuration - const isIntercomEnabled = - instanceConfigurations?.find((config) => config.key === "IS_INTERCOM_ENABLED")?.value === "1"; - if (!payload.is_telemetry_enabled && isIntercomEnabled) { - try { - await updateInstanceConfigurations({ IS_INTERCOM_ENABLED: "0" }); - } catch (error) { - console.error(error); - } - } - await updateInstanceInfo(payload) .then(() => setToast({ @@ -112,8 +98,7 @@ export const GeneralConfigurationForm = observer(function GeneralConfigurationFo
-
Chat + telemetry
- +
Telemetry
diff --git a/apps/admin/app/(all)/(dashboard)/general/intercom.tsx b/apps/admin/app/(all)/(dashboard)/general/intercom.tsx deleted file mode 100644 index 656e2d69022..00000000000 --- a/apps/admin/app/(all)/(dashboard)/general/intercom.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { useState } from "react"; -import { observer } from "mobx-react"; -import useSWR from "swr"; -import { MessageSquare } from "lucide-react"; -import type { IFormattedInstanceConfiguration } from "@plane/types"; -import { ToggleSwitch } from "@plane/ui"; -// hooks -import { useInstance } from "@/hooks/store"; - -type TIntercomConfig = { - isTelemetryEnabled: boolean; -}; - -export const IntercomConfig = observer(function IntercomConfig(props: TIntercomConfig) { - const { isTelemetryEnabled } = props; - // hooks - const { instanceConfigurations, updateInstanceConfigurations, fetchInstanceConfigurations } = useInstance(); - // states - const [isSubmitting, setIsSubmitting] = useState(false); - - // derived values - const isIntercomEnabled = isTelemetryEnabled - ? instanceConfigurations - ? instanceConfigurations?.find((config) => config.key === "IS_INTERCOM_ENABLED")?.value === "1" - ? true - : false - : undefined - : false; - - const { isLoading } = useSWR(isTelemetryEnabled ? "INSTANCE_CONFIGURATIONS" : null, () => - isTelemetryEnabled ? fetchInstanceConfigurations() : null - ); - - const initialLoader = isLoading && isIntercomEnabled === undefined; - - const submitInstanceConfigurations = async (payload: Partial) => { - try { - await updateInstanceConfigurations(payload); - } catch (error) { - console.error(error); - } finally { - setIsSubmitting(false); - } - }; - - const enableIntercomConfig = () => { - void submitInstanceConfigurations({ IS_INTERCOM_ENABLED: isIntercomEnabled ? "0" : "1" }); - }; - - return ( - <> -
-
-
-
- -
-
- -
-
Chat with us
-
- Let your users chat with us via Intercom or another service. Toggling Telemetry off turns this off - automatically. -
-
- -
- -
-
-
- - ); -}); diff --git a/apps/admin/app/root.tsx b/apps/admin/app/root.tsx index 1bfcfa37d88..5d4eafb765a 100644 --- a/apps/admin/app/root.tsx +++ b/apps/admin/app/root.tsx @@ -88,7 +88,7 @@ export function HydrateFallback() { ); } -export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { +export function ErrorBoundary({ error: _error }: Route.ErrorBoundaryProps) { return (

Something went wrong.

diff --git a/apps/admin/package.json b/apps/admin/package.json index 2d314b06123..8a492643a5e 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -1,6 +1,6 @@ { "name": "admin", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Admin UI for Plane", "license": "AGPL-3.0", @@ -49,7 +49,6 @@ "uuid": "catalog:" }, "devDependencies": { - "@dotenvx/dotenvx": "catalog:", "@plane/tailwind-config": "workspace:*", "@plane/typescript-config": "workspace:*", "@react-router/dev": "catalog:", @@ -57,6 +56,7 @@ "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "dotenv": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "^5.1.4" diff --git a/apps/admin/vite.config.ts b/apps/admin/vite.config.ts index c9d97157f41..f61d9b49eb5 100644 --- a/apps/admin/vite.config.ts +++ b/apps/admin/vite.config.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import * as dotenv from "@dotenvx/dotenvx"; +import * as dotenv from "dotenv"; import { reactRouter } from "@react-router/dev/vite"; import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; diff --git a/apps/api/package.json b/apps/api/package.json index 6e62f2bd114..99f5de98794 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,7 +1,7 @@ { "name": "plane-api", - "version": "1.2.0", - "license": "AGPL-3.0", + "version": "1.3.0", "private": true, - "description": "API server powering Plane's backend" + "description": "API server powering Plane's backend", + "license": "AGPL-3.0" } diff --git a/apps/api/plane/api/serializers/__init__.py b/apps/api/plane/api/serializers/__init__.py index 44e527a2dc5..2ab639d5466 100644 --- a/apps/api/plane/api/serializers/__init__.py +++ b/apps/api/plane/api/serializers/__init__.py @@ -25,6 +25,10 @@ IssueCommentCreateSerializer, IssueLinkCreateSerializer, IssueLinkUpdateSerializer, + IssueRelationCreateSerializer, + IssueRelationResponseSerializer, + IssueRelationSerializer, + RelatedIssueSerializer, ) from .state import StateLiteSerializer, StateSerializer from .cycle import ( @@ -49,7 +53,7 @@ IntakeIssueCreateSerializer, IntakeIssueUpdateSerializer, ) -from .estimate import EstimatePointSerializer +from .estimate import EstimateSerializer, EstimatePointSerializer from .asset import ( UserAssetUploadSerializer, AssetUpdateSerializer, diff --git a/apps/api/plane/api/serializers/estimate.py b/apps/api/plane/api/serializers/estimate.py index e2a7c5e1d32..978003240b0 100644 --- a/apps/api/plane/api/serializers/estimate.py +++ b/apps/api/plane/api/serializers/estimate.py @@ -2,20 +2,36 @@ # SPDX-License-Identifier: AGPL-3.0-only # See the LICENSE file for details. +# Third party imports +from rest_framework import serializers + # Module imports -from plane.db.models import EstimatePoint +from plane.db.models import Estimate, EstimatePoint from .base import BaseSerializer -class EstimatePointSerializer(BaseSerializer): - """ - Serializer for project estimation points and story point values. +class EstimateSerializer(BaseSerializer): + class Meta: + model = Estimate + fields = "__all__" + read_only_fields = ["workspace", "project", "deleted_at"] - Handles numeric estimation data for work item sizing and sprint planning, - providing standardized point values for project velocity calculations. - """ + def create(self, validated_data): + validated_data["workspace"] = self.context["workspace"] + validated_data["project"] = self.context["project"] + return super().create(validated_data) + + +class EstimatePointSerializer(BaseSerializer): + def validate(self, data): + if not data: + raise serializers.ValidationError("Estimate points are required") + value = data.get("value") + if value and len(value) > 20: + raise serializers.ValidationError("Value can't be more than 20 characters") + return data class Meta: model = EstimatePoint - fields = ["id", "value"] - read_only_fields = fields + fields = "__all__" + read_only_fields = ["estimate", "workspace", "project"] diff --git a/apps/api/plane/api/serializers/issue.py b/apps/api/plane/api/serializers/issue.py index ba9ddae301d..6468ddbc84f 100644 --- a/apps/api/plane/api/serializers/issue.py +++ b/apps/api/plane/api/serializers/issue.py @@ -20,6 +20,7 @@ IssueComment, IssueLabel, IssueLink, + IssueRelation, Label, ProjectMember, State, @@ -479,6 +480,184 @@ class Meta: ] +class IssueRelationResponseSerializer(serializers.Serializer): + """ + Serializer for issue relations response showing grouped relation types. + + Returns issue IDs organized by relation type for efficient client-side processing. + """ + + blocking = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that are blocking this issue", + ) + blocked_by = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that this issue is blocked by", + ) + duplicate = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that are duplicates of this issue", + ) + relates_to = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that relate to this issue", + ) + start_after = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that start after this issue", + ) + start_before = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that start before this issue", + ) + finish_after = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that finish after this issue", + ) + finish_before = serializers.ListField( + child=serializers.UUIDField(), + help_text="List of issue IDs that finish before this issue", + ) + + +class IssueRelationCreateSerializer(serializers.Serializer): + """ + Serializer for creating issue relations. + + Creates issue relations with the specified relation type and issues. + Validates relation types and ensures proper issue ID format. + """ + + RELATION_TYPE_CHOICES = [ + ("blocking", "Blocking"), + ("blocked_by", "Blocked By"), + ("duplicate", "Duplicate"), + ("relates_to", "Relates To"), + ("start_before", "Start Before"), + ("start_after", "Start After"), + ("finish_before", "Finish Before"), + ("finish_after", "Finish After"), + ] + + relation_type = serializers.ChoiceField( + choices=RELATION_TYPE_CHOICES, + required=True, + help_text="Type of relationship between work items", + ) + issues = serializers.ListField( + child=serializers.UUIDField(), + required=True, + min_length=1, + help_text="Array of work item IDs to create relations with", + ) + + def validate_issues(self, value): + """Validate that issues list is not empty and contains valid UUIDs.""" + if not value: + raise serializers.ValidationError("At least one issue ID is required.") + return value + + +class IssueRelationRemoveSerializer(serializers.Serializer): + """ + Serializer for removing issue relations. + + Removes existing relationships between work items by specifying + the related issue ID. + """ + + related_issue = serializers.UUIDField( + required=True, help_text="ID of the related work item to remove relation with" + ) + + +class IssueRelationSerializer(BaseSerializer): + """ + Serializer for issue relationships showing related issue details. + + Provides comprehensive information about related issues including + project context, sequence ID, and relationship type. + """ + + id = serializers.UUIDField(source="related_issue.id", read_only=True) + project_id = serializers.UUIDField(source="related_issue.project_id", read_only=True) + sequence_id = serializers.IntegerField(source="related_issue.sequence_id", read_only=True) + name = serializers.CharField(source="related_issue.name", read_only=True) + relation_type = serializers.CharField(read_only=True) + state_id = serializers.UUIDField(source="related_issue.state.id", read_only=True) + priority = serializers.CharField(source="related_issue.priority", read_only=True) + + class Meta: + model = IssueRelation + fields = [ + "id", + "project_id", + "sequence_id", + "relation_type", + "name", + "state_id", + "priority", + "created_by", + "created_at", + "updated_at", + "updated_by", + ] + read_only_fields = [ + "workspace", + "project", + "created_by", + "created_at", + "updated_by", + "updated_at", + ] + + +class RelatedIssueSerializer(BaseSerializer): + """ + Serializer for reverse issue relationships showing issue details. + + Provides comprehensive information about the source issue in a relationship + including project context, sequence ID, and relationship type. + """ + + id = serializers.UUIDField(source="issue.id", read_only=True) + project_id = serializers.PrimaryKeyRelatedField(source="issue.project_id", read_only=True) + sequence_id = serializers.IntegerField(source="issue.sequence_id", read_only=True) + name = serializers.CharField(source="issue.name", read_only=True) + type_id = serializers.UUIDField(source="issue.type.id", read_only=True) + relation_type = serializers.CharField(read_only=True) + is_epic = serializers.BooleanField(source="issue.type.is_epic", read_only=True) + state_id = serializers.UUIDField(source="issue.state.id", read_only=True) + priority = serializers.CharField(source="issue.priority", read_only=True) + + class Meta: + model = IssueRelation + fields = [ + "id", + "project_id", + "sequence_id", + "relation_type", + "name", + "type_id", + "is_epic", + "state_id", + "priority", + "created_by", + "created_at", + "updated_by", + "updated_at", + ] + read_only_fields = [ + "workspace", + "project", + "created_by", + "created_at", + "updated_by", + "updated_at", + ] + + class IssueAttachmentSerializer(BaseSerializer): """ Serializer for work item file attachments. diff --git a/apps/api/plane/api/urls/estimate.py b/apps/api/plane/api/urls/estimate.py new file mode 100644 index 00000000000..3fe5d3b7b43 --- /dev/null +++ b/apps/api/plane/api/urls/estimate.py @@ -0,0 +1,29 @@ +# Copyright (c) 2023-present Plane Software, Inc. and contributors +# SPDX-License-Identifier: AGPL-3.0-only +# See the LICENSE file for details. + +from django.urls import path + +from plane.api.views.estimate import ( + ProjectEstimateAPIEndpoint, + EstimatePointListCreateAPIEndpoint, + EstimatePointDetailAPIEndpoint, +) + +urlpatterns = [ + path( + "workspaces//projects//estimates/", + ProjectEstimateAPIEndpoint.as_view(http_method_names=["get", "post", "patch", "delete"]), + name="project-estimate", + ), + path( + "workspaces//projects//estimates//estimate-points/", + EstimatePointListCreateAPIEndpoint.as_view(http_method_names=["get", "post"]), + name="estimate-point-list-create", + ), + path( + "workspaces//projects//estimates//estimate-points//", + EstimatePointDetailAPIEndpoint.as_view(http_method_names=["patch", "delete"]), + name="estimate-point-detail", + ), +] diff --git a/apps/api/plane/api/urls/work_item.py b/apps/api/plane/api/urls/work_item.py index 48b1948dbe5..1a1704f2773 100644 --- a/apps/api/plane/api/urls/work_item.py +++ b/apps/api/plane/api/urls/work_item.py @@ -17,6 +17,7 @@ IssueAttachmentDetailAPIEndpoint, WorkspaceIssueAPIEndpoint, IssueSearchEndpoint, + IssueRelationListCreateAPIEndpoint, ) # Deprecated url patterns @@ -145,6 +146,11 @@ IssueAttachmentDetailAPIEndpoint.as_view(http_method_names=["get", "patch", "delete"]), name="work-item-attachment-detail", ), + path( + "workspaces//projects//work-items//relations/", + IssueRelationListCreateAPIEndpoint.as_view(http_method_names=["get", "post"]), + name="work-item-relation-list", + ), ] urlpatterns = old_url_patterns + new_url_patterns diff --git a/apps/api/plane/api/views/__init__.py b/apps/api/plane/api/views/__init__.py index 644d87edc86..e8549afb437 100644 --- a/apps/api/plane/api/views/__init__.py +++ b/apps/api/plane/api/views/__init__.py @@ -29,6 +29,7 @@ IssueAttachmentListCreateAPIEndpoint, IssueAttachmentDetailAPIEndpoint, IssueSearchEndpoint, + IssueRelationListCreateAPIEndpoint, ) from .cycle import ( diff --git a/apps/api/plane/api/views/estimate.py b/apps/api/plane/api/views/estimate.py new file mode 100644 index 00000000000..915cc8e5cc3 --- /dev/null +++ b/apps/api/plane/api/views/estimate.py @@ -0,0 +1,291 @@ +# Copyright (c) 2023-present Plane Software, Inc. and contributors +# SPDX-License-Identifier: AGPL-3.0-only +# See the LICENSE file for details. + +# Third party imports +from rest_framework.response import Response +from rest_framework import status +from drf_spectacular.utils import OpenApiRequest, OpenApiResponse + +# Module imports +from plane.app.permissions.project import ProjectEntityPermission +from plane.api.views.base import BaseAPIView +from plane.db.models import Estimate, EstimatePoint, Project, Workspace +from plane.api.serializers import EstimateSerializer, EstimatePointSerializer +from plane.utils.openapi.decorators import estimate_docs, estimate_point_docs +from plane.utils.openapi import ( + ESTIMATE_CREATE_EXAMPLE, + ESTIMATE_UPDATE_EXAMPLE, + ESTIMATE_POINT_CREATE_EXAMPLE, + ESTIMATE_POINT_UPDATE_EXAMPLE, + ESTIMATE_EXAMPLE, + ESTIMATE_POINT_EXAMPLE, + DELETED_RESPONSE, + WORKSPACE_SLUG_PARAMETER, + PROJECT_ID_PARAMETER, + ESTIMATE_ID_PARAMETER, +) + + +class ProjectEstimateAPIEndpoint(BaseAPIView): + permission_classes = [ProjectEntityPermission] + model = Estimate + serializer_class = EstimateSerializer + + def get_queryset(self): + return self.model.objects.filter(workspace__slug=self.workspace_slug, project_id=self.project_id) + + @estimate_docs( + operation_id="create_estimate", + summary="Create an estimate", + description="Create an estimate for a project", + request=OpenApiRequest( + request=EstimateSerializer, + examples=[ESTIMATE_CREATE_EXAMPLE], + ), + ) + def post(self, request, slug, project_id): + project = Project.objects.filter(id=project_id, workspace__slug=slug).first() + if not project: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Project not found"}) + + workspace = Workspace.objects.filter(slug=slug).first() + if not workspace: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Workspace not found"}) + + project_estimate = self.get_queryset().first() + if project_estimate: + # return 409 if the project estimate already exists + return Response( + status=status.HTTP_409_CONFLICT, + data={"error": "An estimate already exists for this project", "id": str(project_estimate.id)}, + ) + # create the project estimate + serializer = self.serializer_class(data=request.data, context={"workspace": workspace, "project": project}) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) + + @estimate_docs( + operation_id="get_estimate", + summary="Get an estimate", + description="Get an estimate for a project", + responses={ + 200: OpenApiResponse( + description="Estimate", + response=EstimateSerializer, + examples=[ESTIMATE_EXAMPLE], + ), + }, + ) + def get(self, request, slug, project_id): + estimate = self.get_queryset().first() + if not estimate: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate not found"}) + serializer = self.serializer_class(estimate) + return Response(serializer.data, status=status.HTTP_200_OK) + + @estimate_docs( + operation_id="update_estimate", + summary="Update an estimate", + description="Update an estimate for a project", + request=OpenApiRequest( + request=EstimateSerializer, + examples=[ESTIMATE_UPDATE_EXAMPLE], + ), + responses={ + 200: OpenApiResponse( + description="Estimate", + response=EstimateSerializer, + examples=[ESTIMATE_EXAMPLE], + ), + }, + ) + def patch(self, request, slug, project_id): + ALLOWED_FIELDS = ["name", "description"] + estimate = self.get_queryset().first() + if not estimate: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate not found"}) + filtered_data = {k: v for k, v in request.data.items() if k in ALLOWED_FIELDS} + if not filtered_data: + serializer = self.serializer_class(estimate) + return Response(serializer.data, status=status.HTTP_200_OK) + serializer = self.serializer_class(estimate, data=filtered_data, partial=True) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + serializer.save() + return Response(serializer.data, status=status.HTTP_200_OK) + + @estimate_docs( + operation_id="delete_estimate", + summary="Delete an estimate", + description="Delete an estimate for a project", + responses={ + 204: DELETED_RESPONSE, + }, + ) + def delete(self, request, slug, project_id): + estimate = self.get_queryset().first() + if not estimate: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate not found"}) + estimate.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + + +class EstimatePointListCreateAPIEndpoint(BaseAPIView): + """List and bulk create estimate points for an estimate.""" + + permission_classes = [ProjectEntityPermission] + model = EstimatePoint + serializer_class = EstimatePointSerializer + + def get_queryset(self): + return self.model.objects.filter( + estimate_id=self.kwargs["estimate_id"], + workspace__slug=self.kwargs["slug"], + project_id=self.kwargs["project_id"], + ).select_related("estimate", "workspace", "project") + + @estimate_point_docs( + operation_id="get_estimate_points", + summary="Get estimate points", + description="Get estimate points for an estimate", + parameters=[ + WORKSPACE_SLUG_PARAMETER, + PROJECT_ID_PARAMETER, + ESTIMATE_ID_PARAMETER, + ], + responses={ + 200: OpenApiResponse( + description="Estimate points", + response=EstimatePointSerializer(many=True), + examples=[ESTIMATE_POINT_EXAMPLE], + ), + }, + ) + def get(self, request, slug, project_id, estimate_id): + estimate = Estimate.objects.filter( + id=estimate_id, + workspace__slug=slug, + project_id=project_id, + ).first() + if not estimate: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate not found"}) + estimate_points = self.get_queryset() + serializer = self.serializer_class(estimate_points, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + + @estimate_point_docs( + operation_id="create_estimate_points", + summary="Create estimate points", + description="Create estimate points for an estimate", + request=OpenApiRequest( + request=EstimatePointSerializer, + examples=[ESTIMATE_POINT_CREATE_EXAMPLE], + ), + responses={ + 201: OpenApiResponse( + description="Estimate points", + response=EstimatePointSerializer(many=True), + examples=[ESTIMATE_POINT_EXAMPLE], + ), + }, + ) + def post(self, request, slug, project_id, estimate_id): + estimate = Estimate.objects.filter( + id=estimate_id, + workspace__slug=slug, + project_id=project_id, + ).first() + if not estimate: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate not found"}) + + estimate_points_data = ( + request.data if isinstance(request.data, list) else request.data.get("estimate_points", []) + ) + if not estimate_points_data: + return Response( + status=status.HTTP_400_BAD_REQUEST, + data={"error": "Estimate points are required"}, + ) + + serializer = self.serializer_class(data=estimate_points_data, many=True) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + estimate_points = [ + EstimatePoint( + estimate=estimate, + workspace=estimate.workspace, + project=estimate.project, + **item, + ) + for item in serializer.validated_data + ] + created = EstimatePoint.objects.bulk_create(estimate_points) + return Response( + self.serializer_class(created, many=True).data, + status=status.HTTP_201_CREATED, + ) + + +class EstimatePointDetailAPIEndpoint(BaseAPIView): + """Update and delete a single estimate point.""" + + permission_classes = [ProjectEntityPermission] + model = EstimatePoint + serializer_class = EstimatePointSerializer + + def get_queryset(self): + return self.model.objects.filter( + estimate_id=self.kwargs["estimate_id"], + workspace__slug=self.kwargs["slug"], + project_id=self.kwargs["project_id"], + ) + + @estimate_point_docs( + operation_id="update_estimate_point", + summary="Update an estimate point", + description="Update an estimate point for an estimate", + request=OpenApiRequest( + request=EstimatePointSerializer, + examples=[ESTIMATE_POINT_UPDATE_EXAMPLE], + ), + responses={ + 200: OpenApiResponse( + description="Estimate point", + response=EstimatePointSerializer, + examples=[ESTIMATE_POINT_EXAMPLE], + ), + }, + ) + def patch(self, request, slug, project_id, estimate_id, estimate_point_id): + estimate_point = self.get_queryset().filter(id=estimate_point_id).first() + if not estimate_point: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate point not found"}) + ALLOWED_FIELDS = ["key", "value", "description"] + filtered_data = {k: v for k, v in request.data.items() if k in ALLOWED_FIELDS} + if not filtered_data: + return Response(self.serializer_class(estimate_point).data, status=status.HTTP_200_OK) + serializer = self.serializer_class(estimate_point, data=filtered_data, partial=True) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + serializer.save() + return Response(serializer.data, status=status.HTTP_200_OK) + + @estimate_point_docs( + operation_id="delete_estimate_point", + summary="Delete an estimate point", + description="Delete an estimate point for an estimate", + responses={ + 204: DELETED_RESPONSE, + }, + ) + def delete(self, request, slug, project_id, estimate_id, estimate_point_id): + estimate_point = self.get_queryset().filter(id=estimate_point_id).first() + if not estimate_point: + return Response(status=status.HTTP_404_NOT_FOUND, data={"error": "Estimate point not found"}) + estimate_point.delete() + return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/apps/api/plane/api/views/issue.py b/apps/api/plane/api/views/issue.py index b936cdcda00..97e8e7cee0a 100644 --- a/apps/api/plane/api/views/issue.py +++ b/apps/api/plane/api/views/issue.py @@ -23,7 +23,11 @@ Value, When, Subquery, + UUIDField, ) +from django.db.models.functions import Coalesce +from django.contrib.postgres.aggregates import ArrayAgg +from django.contrib.postgres.fields import ArrayField from django.utils import timezone from django.conf import settings @@ -45,6 +49,9 @@ IssueActivitySerializer, IssueCommentSerializer, IssueLinkSerializer, + IssueRelationCreateSerializer, + IssueRelationResponseSerializer, + IssueRelationSerializer, IssueSerializer, LabelSerializer, IssueAttachmentUploadSerializer, @@ -53,6 +60,7 @@ IssueLinkCreateSerializer, IssueLinkUpdateSerializer, LabelCreateUpdateSerializer, + RelatedIssueSerializer, ) from plane.app.permissions import ( ProjectEntityPermission, @@ -66,6 +74,7 @@ FileAsset, IssueComment, IssueLink, + IssueRelation, Label, Project, ProjectMember, @@ -76,10 +85,12 @@ from plane.bgtasks.storage_metadata_task import get_asset_object_metadata from .base import BaseAPIView from plane.utils.host import base_host +from plane.utils.issue_relation_mapper import get_actual_relation from plane.bgtasks.webhook_task import model_activity from plane.app.permissions import ROLE from plane.utils.openapi import ( work_item_docs, + work_item_relation_docs, label_docs, issue_link_docs, issue_comment_docs, @@ -629,6 +640,16 @@ def put(self, request, slug, project_id): current_instance=current_instance, epoch=int(timezone.now().timestamp()), ) + # Send the model activity for webhook dispatch + model_activity.delay( + model_name="issue", + model_id=str(issue.id), + requested_data=request.data, + current_instance=current_instance, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response( # If the serializer is not valid, respond with 400 bad @@ -677,6 +698,16 @@ def put(self, request, slug, project_id): current_instance=None, epoch=int(timezone.now().timestamp()), ) + # Send the model activity for webhook dispatch + model_activity.delay( + model_name="issue", + model_id=str(serializer.data["id"]), + requested_data=request.data, + current_instance=None, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: @@ -752,6 +783,16 @@ def patch(self, request, slug, project_id, pk): current_instance=current_instance, epoch=int(timezone.now().timestamp()), ) + # Send the model activity for webhook dispatch + model_activity.delay( + model_name="issue", + model_id=str(pk), + requested_data=request.data, + current_instance=current_instance, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -1089,9 +1130,9 @@ def get(self, request, slug, project_id, issue_id): return self.paginate( request=request, queryset=(self.get_queryset()), - on_results=lambda issue_links: IssueLinkSerializer( - issue_links, many=True, fields=self.fields, expand=self.expand - ).data, + on_results=lambda issue_links: ( + IssueLinkSerializer(issue_links, many=True, fields=self.fields, expand=self.expand).data + ), ) @issue_link_docs( @@ -1196,9 +1237,9 @@ def get(self, request, slug, project_id, issue_id, pk): return self.paginate( request=request, queryset=(self.get_queryset()), - on_results=lambda issue_links: IssueLinkSerializer( - issue_links, many=True, fields=self.fields, expand=self.expand - ).data, + on_results=lambda issue_links: ( + IssueLinkSerializer(issue_links, many=True, fields=self.fields, expand=self.expand).data + ), ) issue_link = self.get_queryset().get(pk=pk) serializer = IssueLinkSerializer(issue_link, fields=self.fields, expand=self.expand) @@ -1347,9 +1388,9 @@ def get(self, request, slug, project_id, issue_id): return self.paginate( request=request, queryset=(self.get_queryset()), - on_results=lambda issue_comments: IssueCommentSerializer( - issue_comments, many=True, fields=self.fields, expand=self.expand - ).data, + on_results=lambda issue_comments: ( + IssueCommentSerializer(issue_comments, many=True, fields=self.fields, expand=self.expand).data + ), ) @issue_comment_docs( @@ -1658,9 +1699,9 @@ def get(self, request, slug, project_id, issue_id): return self.paginate( request=request, queryset=(issue_activities), - on_results=lambda issue_activity: IssueActivitySerializer( - issue_activity, many=True, fields=self.fields, expand=self.expand - ).data, + on_results=lambda issue_activity: ( + IssueActivitySerializer(issue_activity, many=True, fields=self.fields, expand=self.expand).data + ), ) @@ -2220,3 +2261,224 @@ def get(self, request, slug): )[: int(limit)] return Response({"issues": issue_results}, status=status.HTTP_200_OK) + + +class IssueRelationListCreateAPIEndpoint(BaseAPIView): + """Issue Relation List and Create Endpoint""" + + serializer_class = IssueRelationSerializer + model = IssueRelation + permission_classes = [ProjectEntityPermission] + use_read_replica = True + + @work_item_relation_docs( + operation_id="list_work_item_relations", + summary="List work item relations", + description="Retrieve all relationships for a work item including blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, and finish_after relations.", # noqa E501 + parameters=[ + ISSUE_ID_PARAMETER, + CURSOR_PARAMETER, + PER_PAGE_PARAMETER, + ORDER_BY_PARAMETER, + FIELDS_PARAMETER, + EXPAND_PARAMETER, + ], + responses={ + 200: OpenApiResponse( + description="Work item relations grouped by relation type", + response=IssueRelationResponseSerializer, + examples=[ + OpenApiExample( + name="Work Item Relations Response", + value={ + "blocking": [ + "550e8400-e29b-41d4-a716-446655440000", + "550e8400-e29b-41d4-a716-446655440001", + ], + "blocked_by": ["550e8400-e29b-41d4-a716-446655440002"], + "duplicate": [], + "relates_to": ["550e8400-e29b-41d4-a716-446655440003"], + "start_after": [], + "start_before": ["550e8400-e29b-41d4-a716-446655440004"], + "finish_after": [], + "finish_before": [], + }, + ) + ], + ), + 400: INVALID_REQUEST_RESPONSE, + 404: ISSUE_NOT_FOUND_RESPONSE, + }, + ) + def get(self, request, slug, project_id, issue_id): + """List work item relations + + Retrieve all relationships for a work item organized by relation type. + Returns a structured response with relations grouped by type. + """ + empty_uuid_array = Value([], output_field=ArrayField(UUIDField())) + + def _agg_ids(field, **filter_kwargs): + return Coalesce( + ArrayAgg(field, filter=Q(**filter_kwargs), distinct=True), + empty_uuid_array, + ) + + issue_relation_qs = IssueRelation.objects.filter( + Q(issue_id=issue_id) | Q(related_issue_id=issue_id), + workspace__slug=slug, + ) + + relation_ids = issue_relation_qs.aggregate( + blocking_ids=_agg_ids("issue_id", relation_type="blocked_by", related_issue_id=issue_id), + blocked_by_ids=_agg_ids("related_issue_id", relation_type="blocked_by", issue_id=issue_id), + duplicate_ids=_agg_ids("related_issue_id", relation_type="duplicate", issue_id=issue_id), + duplicate_ids_related=_agg_ids("issue_id", relation_type="duplicate", related_issue_id=issue_id), + relates_to_ids=_agg_ids("related_issue_id", relation_type="relates_to", issue_id=issue_id), + relates_to_ids_related=_agg_ids("issue_id", relation_type="relates_to", related_issue_id=issue_id), + start_after_ids=_agg_ids("issue_id", relation_type="start_before", related_issue_id=issue_id), + start_before_ids=_agg_ids("related_issue_id", relation_type="start_before", issue_id=issue_id), + finish_after_ids=_agg_ids("issue_id", relation_type="finish_before", related_issue_id=issue_id), + finish_before_ids=_agg_ids("related_issue_id", relation_type="finish_before", issue_id=issue_id), + ) + + response_data = { + "blocking": relation_ids["blocking_ids"], + "blocked_by": relation_ids["blocked_by_ids"], + "duplicate": list(set(relation_ids["duplicate_ids"] + relation_ids["duplicate_ids_related"])), + "relates_to": list(set(relation_ids["relates_to_ids"] + relation_ids["relates_to_ids_related"])), + "start_after": relation_ids["start_after_ids"], + "start_before": relation_ids["start_before_ids"], + "finish_after": relation_ids["finish_after_ids"], + "finish_before": relation_ids["finish_before_ids"], + } + + return Response(response_data, status=status.HTTP_200_OK) + + @work_item_relation_docs( + operation_id="create_work_item_relation", + summary="Create work item relation", + description="Create relationships between work items. Supports various relation types including blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, and finish_after.", # noqa E501 + parameters=[ + ISSUE_ID_PARAMETER, + ], + request=OpenApiRequest( + request=IssueRelationCreateSerializer, + examples=[ + OpenApiExample( + name="Create blocking relation", + value={ + "relation_type": "blocking", + "issues": [ + "550e8400-e29b-41d4-a716-446655440000", + "550e8400-e29b-41d4-a716-446655440001", + ], + }, + ) + ], + ), + responses={ + 201: OpenApiResponse( + description="Work item relations created successfully", + response=IssueRelationSerializer(many=True), + examples=[ + OpenApiExample( + name="Relations created", + value=[ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug", + "sequence_id": 42, + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "relation_type": "blocked_by", + "state_id": "550e8400-e29b-41d4-a716-446655440002", + "priority": "high", + "created_at": "2024-01-15T10:00:00Z", + "updated_at": "2024-01-15T10:00:00Z", + "created_by": "550e8400-e29b-41d4-a716-446655440004", + "updated_by": "550e8400-e29b-41d4-a716-446655440004", + } + ], + ) + ], + ), + 400: INVALID_REQUEST_RESPONSE, + 404: ISSUE_NOT_FOUND_RESPONSE, + }, + ) + def post(self, request, slug, project_id, issue_id): + """Create work item relation + + Create relationships between work items with specified relation type. + Automatically tracks relation creation activity. + """ + # Validate request data using serializer + serializer = IssueRelationCreateSerializer(data=request.data) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + relation_type = serializer.validated_data["relation_type"] + issues = serializer.validated_data["issues"] + project = Project.objects.get(pk=project_id, workspace__slug=slug) + + actual_relation = get_actual_relation(relation_type) + is_reverse = relation_type in ["blocking", "start_after", "finish_after"] + + IssueRelation.objects.bulk_create( + [ + IssueRelation( + issue_id=(issue if is_reverse else issue_id), + related_issue_id=(issue_id if is_reverse else issue), + relation_type=actual_relation, + project_id=project_id, + workspace_id=project.workspace_id, + created_by=request.user, + updated_by=request.user, + ) + for issue in issues + ], + batch_size=10, + ignore_conflicts=True, + ) + + issue_activity.delay( + type="issue_relation.activity.created", + requested_data=json.dumps(request.data, cls=DjangoJSONEncoder), + actor_id=str(request.user.id), + issue_id=str(issue_id), + project_id=str(project_id), + current_instance=None, + epoch=int(timezone.now().timestamp()), + notification=True, + origin=base_host(request=request, is_app=True), + ) + + # Re-fetch with select_related to avoid N+1 queries in serializers. + # bulk_create with ignore_conflicts=True may not return PKs, + # so query by the issue/related_issue pairs and relation type. + if is_reverse: + refetch_filter = Q( + issue_id__in=issues, + related_issue_id=issue_id, + relation_type=actual_relation, + ) + else: + refetch_filter = Q( + issue_id=issue_id, + related_issue_id__in=issues, + relation_type=actual_relation, + ) + + refetched_relations = IssueRelation.objects.filter( + refetch_filter, + workspace__slug=slug, + ).select_related( + "issue__state", + "related_issue__state", + ) + + serializer_class = RelatedIssueSerializer if is_reverse else IssueRelationSerializer + return Response( + serializer_class(refetched_relations, many=True).data, + status=status.HTTP_201_CREATED, + ) diff --git a/apps/api/plane/app/permissions/base.py b/apps/api/plane/app/permissions/base.py index 7b243cbb789..9c451ed86ab 100644 --- a/apps/api/plane/app/permissions/base.py +++ b/apps/api/plane/app/permissions/base.py @@ -22,6 +22,17 @@ def decorator(view_func): def _wrapped_view(instance, request, *args, **kwargs): # Check for creator if required if creator and model: + # check if the user is part of the workspace or not + if not WorkspaceMember.objects.filter( + member=request.user, + workspace__slug=kwargs["slug"], + is_active=True, + ).exists(): + return Response( + {"error": "You don't have the required permissions."}, + status=status.HTTP_403_FORBIDDEN, + ) + obj = model.objects.filter(id=kwargs["pk"], created_by=request.user).exists() if obj: return view_func(instance, request, *args, **kwargs) diff --git a/apps/api/plane/app/urls/api.py b/apps/api/plane/app/urls/api.py index eedf18ccc3d..145cfdd652d 100644 --- a/apps/api/plane/app/urls/api.py +++ b/apps/api/plane/app/urls/api.py @@ -3,7 +3,7 @@ # See the LICENSE file for details. from django.urls import path -from plane.app.views import ApiTokenEndpoint, ServiceApiTokenEndpoint +from plane.app.views import ApiTokenEndpoint urlpatterns = [ # API Tokens @@ -17,10 +17,5 @@ ApiTokenEndpoint.as_view(), name="api-tokens-details", ), - path( - "workspaces//service-api-tokens/", - ServiceApiTokenEndpoint.as_view(), - name="service-api-tokens", - ), ## End API Tokens ] diff --git a/apps/api/plane/app/views/__init__.py b/apps/api/plane/app/views/__init__.py index baa6661b9cc..84f7872ec85 100644 --- a/apps/api/plane/app/views/__init__.py +++ b/apps/api/plane/app/views/__init__.py @@ -165,7 +165,7 @@ from .module.archive import ModuleArchiveUnarchiveEndpoint -from .api import ApiTokenEndpoint, ServiceApiTokenEndpoint +from .api import ApiTokenEndpoint from .page.base import ( PageViewSet, diff --git a/apps/api/plane/app/views/analytic/base.py b/apps/api/plane/app/views/analytic/base.py index 2f3f8b5737d..a05712c4ecf 100644 --- a/apps/api/plane/app/views/analytic/base.py +++ b/apps/api/plane/app/views/analytic/base.py @@ -29,7 +29,7 @@ Module, ) -from plane.utils.analytics_plot import build_graph_plot +from plane.utils.analytics_plot import build_graph_plot, VALID_ANALYTICS_FIELDS, VALID_YAXIS from plane.utils.issue_filters import issue_filters from plane.app.permissions import allow_permission, ROLE @@ -41,32 +41,15 @@ def get(self, request, slug): y_axis = request.GET.get("y_axis", False) segment = request.GET.get("segment", False) - valid_xaxis_segment = [ - "state_id", - "state__group", - "labels__id", - "assignees__id", - "estimate_point__value", - "issue_cycle__cycle_id", - "issue_module__module_id", - "priority", - "start_date", - "target_date", - "created_at", - "completed_at", - ] - - valid_yaxis = ["issue_count", "estimate"] - # Check for x-axis and y-axis as thery are required parameters - if not x_axis or not y_axis or x_axis not in valid_xaxis_segment or y_axis not in valid_yaxis: + if not x_axis or not y_axis or x_axis not in VALID_ANALYTICS_FIELDS or y_axis not in VALID_YAXIS: return Response( {"error": "x-axis and y-axis dimensions are required and the values should be valid"}, status=status.HTTP_400_BAD_REQUEST, ) # If segment is present it cannot be same as x-axis - if segment and (segment not in valid_xaxis_segment or x_axis == segment): + if segment and (segment not in VALID_ANALYTICS_FIELDS or x_axis == segment): return Response( {"error": "Both segment and x axis cannot be same and segment should be valid"}, status=status.HTTP_400_BAD_REQUEST, @@ -214,13 +197,20 @@ def get(self, request, slug, analytic_id): x_axis = analytic_view.query_dict.get("x_axis", False) y_axis = analytic_view.query_dict.get("y_axis", False) - if not x_axis or not y_axis: + if not x_axis or not y_axis or x_axis not in VALID_ANALYTICS_FIELDS or y_axis not in VALID_YAXIS: return Response( - {"error": "x-axis and y-axis dimensions are required"}, + {"error": "x-axis and y-axis dimensions are required and the values should be valid"}, status=status.HTTP_400_BAD_REQUEST, ) segment = request.GET.get("segment", False) + + if segment and (segment not in VALID_ANALYTICS_FIELDS or x_axis == segment): + return Response( + {"error": "Both segment and x axis cannot be same and segment should be valid"}, + status=status.HTTP_400_BAD_REQUEST, + ) + distribution = build_graph_plot(queryset=queryset, x_axis=x_axis, y_axis=y_axis, segment=segment) total_issues = queryset.count() return Response( @@ -236,32 +226,15 @@ def post(self, request, slug): y_axis = request.data.get("y_axis", False) segment = request.data.get("segment", False) - valid_xaxis_segment = [ - "state_id", - "state__group", - "labels__id", - "assignees__id", - "estimate_point", - "issue_cycle__cycle_id", - "issue_module__module_id", - "priority", - "start_date", - "target_date", - "created_at", - "completed_at", - ] - - valid_yaxis = ["issue_count", "estimate"] - # Check for x-axis and y-axis as thery are required parameters - if not x_axis or not y_axis or x_axis not in valid_xaxis_segment or y_axis not in valid_yaxis: + if not x_axis or not y_axis or x_axis not in VALID_ANALYTICS_FIELDS or y_axis not in VALID_YAXIS: return Response( {"error": "x-axis and y-axis dimensions are required and the values should be valid"}, status=status.HTTP_400_BAD_REQUEST, ) # If segment is present it cannot be same as x-axis - if segment and (segment not in valid_xaxis_segment or x_axis == segment): + if segment and (segment not in VALID_ANALYTICS_FIELDS or x_axis == segment): return Response( {"error": "Both segment and x axis cannot be same and segment should be valid"}, status=status.HTTP_400_BAD_REQUEST, diff --git a/apps/api/plane/app/views/api.py b/apps/api/plane/app/views/api.py index f2abc1a2dec..f3163c33146 100644 --- a/apps/api/plane/app/views/api.py +++ b/apps/api/plane/app/views/api.py @@ -13,9 +13,8 @@ # Module import from .base import BaseAPIView -from plane.db.models import APIToken, Workspace +from plane.db.models import APIToken from plane.app.serializers import APITokenSerializer, APITokenReadSerializer -from plane.app.permissions import WorkspaceEntityPermission class ApiTokenEndpoint(BaseAPIView): @@ -61,28 +60,3 @@ def patch(self, request: Request, pk: str) -> Response: serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - -class ServiceApiTokenEndpoint(BaseAPIView): - permission_classes = [WorkspaceEntityPermission] - - def post(self, request: Request, slug: str) -> Response: - workspace = Workspace.objects.get(slug=slug) - - api_token = APIToken.objects.filter(workspace=workspace, is_service=True).first() - - if api_token: - return Response({"token": str(api_token.token)}, status=status.HTTP_200_OK) - else: - # Check the user type - user_type = 1 if request.user.is_bot else 0 - - api_token = APIToken.objects.create( - label=str(uuid4().hex), - description="Service Token", - user=request.user, - workspace=workspace, - user_type=user_type, - is_service=True, - ) - return Response({"token": str(api_token.token)}, status=status.HTTP_201_CREATED) diff --git a/apps/api/plane/app/views/issue/attachment.py b/apps/api/plane/app/views/issue/attachment.py index fa03ae5f1c3..df027c413b1 100644 --- a/apps/api/plane/app/views/issue/attachment.py +++ b/apps/api/plane/app/views/issue/attachment.py @@ -64,7 +64,10 @@ def delete(self, request, slug, project_id, issue_id, pk): pk=pk, workspace__slug=slug, project_id=project_id, issue_id=issue_id ).first() if not issue_attachment: - return Response(status=status.HTTP_404_NOT_FOUND) + return Response( + {"error": "Issue attachment not found."}, + status=status.HTTP_404_NOT_FOUND, + ) issue_attachment.asset.delete(save=False) issue_attachment.delete() issue_activity.delay( diff --git a/apps/api/plane/app/views/issue/base.py b/apps/api/plane/app/views/issue/base.py index 98a59b6481c..bb331802c84 100644 --- a/apps/api/plane/app/views/issue/base.py +++ b/apps/api/plane/app/views/issue/base.py @@ -1118,7 +1118,7 @@ def post(self, request, slug, project_id): epoch = int(timezone.now().timestamp()) # Fetch all relevant issues in a single query - issues = list(Issue.objects.filter(id__in=issue_ids)) + issues = list(Issue.objects.filter(id__in=issue_ids, workspace__slug=slug, project_id=project_id)) issues_dict = {str(issue.id): issue for issue in issues} issues_to_update = [] diff --git a/apps/api/plane/app/views/issue/sub_issue.py b/apps/api/plane/app/views/issue/sub_issue.py index b52e07564f6..5194148dd7b 100644 --- a/apps/api/plane/app/views/issue/sub_issue.py +++ b/apps/api/plane/app/views/issue/sub_issue.py @@ -7,7 +7,7 @@ # Django imports from django.utils import timezone -from django.db.models import OuterRef, Func, F, Q, Value, UUIDField, Subquery +from django.db.models import OuterRef, Func, F, Q, Value, UUIDField, Subquery, Count, IntegerField from django.utils.decorators import method_decorator from django.views.decorators.gzip import gzip_page from django.contrib.postgres.aggregates import ArrayAgg @@ -22,7 +22,7 @@ from .. import BaseAPIView from plane.app.serializers import IssueSerializer from plane.app.permissions import ProjectEntityPermission -from plane.db.models import Issue, IssueLink, FileAsset, CycleIssue +from plane.db.models import Issue, IssueLink, FileAsset, CycleIssue, IssueLabel, IssueAssignee, ModuleIssue from plane.bgtasks.issue_activities_task import issue_activity from plane.utils.timezone_converter import user_timezone_converter from collections import defaultdict @@ -37,70 +37,97 @@ class SubIssuesEndpoint(BaseAPIView): def get(self, request, slug, project_id, issue_id): sub_issues = ( Issue.issue_objects.filter(parent_id=issue_id, workspace__slug=slug) - .select_related("workspace", "project", "state", "parent") - .prefetch_related("assignees", "labels", "issue_module__module") .annotate( cycle_id=Subquery( CycleIssue.objects.filter(issue=OuterRef("id"), deleted_at__isnull=True).values("cycle_id")[:1] ) ) .annotate( - link_count=IssueLink.objects.filter(issue=OuterRef("id")) - .order_by() - .annotate(count=Func(F("id"), function="Count")) - .values("count") + link_count=Coalesce( + Subquery( + IssueLink.objects.filter(issue=OuterRef("id")) + .order_by() + .values("issue") + .annotate(count=Count("id")) + .values("count"), + output_field=IntegerField(), + ), + 0, + ) ) .annotate( - attachment_count=FileAsset.objects.filter( - issue_id=OuterRef("id"), - entity_type=FileAsset.EntityTypeContext.ISSUE_ATTACHMENT, + attachment_count=Coalesce( + Subquery( + FileAsset.objects.filter( + issue_id=OuterRef("id"), + entity_type=FileAsset.EntityTypeContext.ISSUE_ATTACHMENT, + ) + .order_by() + .values("issue_id") + .annotate(count=Count("id")) + .values("count"), + output_field=IntegerField(), + ), + 0, ) - .order_by() - .annotate(count=Func(F("id"), function="Count")) - .values("count") ) .annotate( - sub_issues_count=Issue.issue_objects.filter(parent=OuterRef("id")) - .order_by() - .annotate(count=Func(F("id"), function="Count")) - .values("count") + sub_issues_count=Coalesce( + Subquery( + Issue.issue_objects.filter(parent=OuterRef("id")) + .order_by() + .values("parent") + .annotate(count=Count("id")) + .values("count"), + output_field=IntegerField(), + ), + 0, + ) ) .annotate( label_ids=Coalesce( - ArrayAgg( - "labels__id", - distinct=True, - filter=Q(~Q(labels__id__isnull=True) & Q(label_issue__deleted_at__isnull=True)), + Subquery( + IssueLabel.objects.filter(issue_id=OuterRef("id"), deleted_at__isnull=True) + .order_by() + .values("issue_id") + .annotate(arr=ArrayAgg("label_id", distinct=True)) + .values("arr"), + output_field=ArrayField(UUIDField()), ), Value([], output_field=ArrayField(UUIDField())), ), assignee_ids=Coalesce( - ArrayAgg( - "assignees__id", - distinct=True, - filter=Q( - ~Q(assignees__id__isnull=True) - & Q(assignees__member_project__is_active=True) - & Q(issue_assignee__deleted_at__isnull=True) - ), + Subquery( + IssueAssignee.objects.filter( + issue_id=OuterRef("id"), + assignee__member_project__is_active=True, + deleted_at__isnull=True, + ) + .order_by() + .values("issue_id") + .annotate(arr=ArrayAgg("assignee_id", distinct=True)) + .values("arr"), + output_field=ArrayField(UUIDField()), ), Value([], output_field=ArrayField(UUIDField())), ), module_ids=Coalesce( - ArrayAgg( - "issue_module__module_id", - distinct=True, - filter=Q( - ~Q(issue_module__module_id__isnull=True) - & Q(issue_module__module__archived_at__isnull=True) - & Q(issue_module__deleted_at__isnull=True) - ), + Subquery( + ModuleIssue.objects.filter( + issue_id=OuterRef("id"), + module__archived_at__isnull=True, + deleted_at__isnull=True, + ) + .order_by() + .values("issue_id") + .annotate(arr=ArrayAgg("module_id", distinct=True)) + .values("arr"), + output_field=ArrayField(UUIDField()), ), Value([], output_field=ArrayField(UUIDField())), ), ) .annotate(state_group=F("state__group")) - .order_by("-created_at") ) # Ordering @@ -110,38 +137,42 @@ def get(self, request, slug, project_id, issue_id): if order_by_param: sub_issues, order_by_param = order_issue_queryset(sub_issues, order_by_param) + sub_issues = list( + sub_issues.values( + "id", + "name", + "state_id", + "sort_order", + "completed_at", + "estimate_point", + "priority", + "start_date", + "target_date", + "sequence_id", + "project_id", + "parent_id", + "cycle_id", + "module_ids", + "label_ids", + "assignee_ids", + "sub_issues_count", + "created_at", + "updated_at", + "created_by", + "updated_by", + "attachment_count", + "link_count", + "is_draft", + "archived_at", + "state_group", + ) + ) + # create's a dict with state group name with their respective issue id's result = defaultdict(list) for sub_issue in sub_issues: - result[sub_issue.state_group].append(str(sub_issue.id)) + result[sub_issue["state_group"]].append(str(sub_issue["id"])) - sub_issues = sub_issues.values( - "id", - "name", - "state_id", - "sort_order", - "completed_at", - "estimate_point", - "priority", - "start_date", - "target_date", - "sequence_id", - "project_id", - "parent_id", - "cycle_id", - "module_ids", - "label_ids", - "assignee_ids", - "sub_issues_count", - "created_at", - "updated_at", - "created_by", - "updated_by", - "attachment_count", - "link_count", - "is_draft", - "archived_at", - ) datetime_fields = ["created_at", "updated_at"] sub_issues = user_timezone_converter(sub_issues, datetime_fields, request.user.user_timezone) # Grouping diff --git a/apps/api/plane/app/views/project/member.py b/apps/api/plane/app/views/project/member.py index 1ad7639fb8b..7dfe7090013 100644 --- a/apps/api/plane/app/views/project/member.py +++ b/apps/api/plane/app/views/project/member.py @@ -226,21 +226,36 @@ def partial_update(self, request, slug, project_id, pk): is_active=True, ) - if workspace_role in [5] and int(request.data.get("role", project_member.role)) in [15, 20]: - return Response( - {"error": "You cannot add a user with role higher than the workspace role"}, - status=status.HTTP_400_BAD_REQUEST, - ) + if "role" in request.data: + # Only Admins can modify roles + if requested_project_member.role < ROLE.ADMIN.value and not is_workspace_admin: + return Response( + {"error": "You do not have permission to update roles"}, + status=status.HTTP_403_FORBIDDEN, + ) - if ( - "role" in request.data - and int(request.data.get("role", project_member.role)) > requested_project_member.role - and not is_workspace_admin - ): - return Response( - {"error": "You cannot update a role that is higher than your own role"}, - status=status.HTTP_400_BAD_REQUEST, - ) + # Cannot modify a member whose role is equal to or higher than your own + if project_member.role >= requested_project_member.role and not is_workspace_admin: + return Response( + {"error": "You cannot update the role of a member with a role equal to or higher than your own"}, + status=status.HTTP_403_FORBIDDEN, + ) + + new_role = int(request.data.get("role")) + + # Cannot assign a role equal to or higher than your own + if new_role >= requested_project_member.role and not is_workspace_admin: + return Response( + {"error": "You cannot assign a role equal to or higher than your own"}, + status=status.HTTP_403_FORBIDDEN, + ) + + # Cannot assign a role higher than the target's workspace role + if workspace_role in [5] and new_role in [15, 20]: + return Response( + {"error": "You cannot add a user with role higher than the workspace role"}, + status=status.HTTP_400_BAD_REQUEST, + ) serializer = ProjectMemberSerializer(project_member, data=request.data, partial=True) diff --git a/apps/api/plane/bgtasks/work_item_link_task.py b/apps/api/plane/bgtasks/work_item_link_task.py index 442396c7f02..5cf0fbb1908 100644 --- a/apps/api/plane/bgtasks/work_item_link_task.py +++ b/apps/api/plane/bgtasks/work_item_link_task.py @@ -13,7 +13,7 @@ from urllib.parse import urlparse, urljoin import base64 import ipaddress -from typing import Dict, Any +from typing import Dict, Any, Tuple from typing import Optional from plane.db.models import IssueLink from plane.utils.exception_logger import log_exception @@ -66,6 +66,52 @@ def validate_url_ip(url: str) -> None: MAX_REDIRECTS = 5 +def safe_get( + url: str, + headers: Optional[Dict[str, str]] = None, + timeout: int = 1, +) -> Tuple[requests.Response, str]: + """ + Perform a GET request that validates every redirect hop against private IPs. + Prevents SSRF by ensuring no redirect lands on a private/internal address. + + Args: + url: The URL to fetch + headers: Optional request headers + timeout: Request timeout in seconds + + Returns: + A tuple of (final Response object, final URL after redirects) + + Raises: + ValueError: If any URL in the redirect chain points to a private IP + requests.RequestException: On network errors + RuntimeError: If max redirects exceeded + """ + validate_url_ip(url) + + current_url = url + response = requests.get( + current_url, headers=headers, timeout=timeout, allow_redirects=False + ) + + redirect_count = 0 + while response.is_redirect: + if redirect_count >= MAX_REDIRECTS: + raise RuntimeError(f"Too many redirects for URL: {url}") + redirect_url = response.headers.get("Location") + if not redirect_url: + break + current_url = urljoin(current_url, redirect_url) + validate_url_ip(current_url) + redirect_count += 1 + response = requests.get( + current_url, headers=headers, timeout=timeout, allow_redirects=False + ) + + return response, current_url + + def crawl_work_item_link_title_and_favicon(url: str) -> Dict[str, Any]: """ Crawls a URL to extract the title and favicon. @@ -86,26 +132,8 @@ def crawl_work_item_link_title_and_favicon(url: str) -> Dict[str, Any]: title = None final_url = url - validate_url_ip(final_url) - try: - # Manually follow redirects to validate each URL before requesting - redirect_count = 0 - response = requests.get(final_url, headers=headers, timeout=1, allow_redirects=False) - - while response.is_redirect and redirect_count < MAX_REDIRECTS: - redirect_url = response.headers.get("Location") - if not redirect_url: - break - # Resolve relative redirects against current URL - final_url = urljoin(final_url, redirect_url) - # Validate the redirect target BEFORE making the request - validate_url_ip(final_url) - redirect_count += 1 - response = requests.get(final_url, headers=headers, timeout=1, allow_redirects=False) - - if redirect_count >= MAX_REDIRECTS: - logger.warning(f"Too many redirects for URL: {url}") + response, final_url = safe_get(url, headers=headers) soup = BeautifulSoup(response.content, "html.parser") title_tag = soup.find("title") @@ -113,8 +141,10 @@ def crawl_work_item_link_title_and_favicon(url: str) -> Dict[str, Any]: except requests.RequestException as e: logger.warning(f"Failed to fetch HTML for title: {str(e)}") + except (ValueError, RuntimeError) as e: + logger.warning(f"URL validation failed: {str(e)}") - # Fetch and encode favicon using final URL (after redirects) + # Fetch and encode favicon using final URL (after redirects) for correct relative href resolution favicon_base64 = fetch_and_encode_favicon(headers, soup, final_url) # Prepare result @@ -204,9 +234,7 @@ def fetch_and_encode_favicon( "favicon_base64": f"data:image/svg+xml;base64,{DEFAULT_FAVICON}", } - validate_url_ip(favicon_url) - - response = requests.get(favicon_url, headers=headers, timeout=1) + response, _ = safe_get(favicon_url, headers=headers) # Get content type content_type = response.headers.get("content-type", "image/x-icon") diff --git a/apps/api/plane/db/migrations/0121_alter_estimate_type.py b/apps/api/plane/db/migrations/0121_alter_estimate_type.py new file mode 100644 index 00000000000..73b75123f63 --- /dev/null +++ b/apps/api/plane/db/migrations/0121_alter_estimate_type.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.28 on 2026-02-26 14:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('db', '0120_issueview_archived_at'), + ] + + operations = [ + migrations.AlterField( + model_name='estimate', + name='type', + field=models.CharField(choices=[('categories', 'Categories'), ('points', 'Points')], default='categories', max_length=255), + ), + ] diff --git a/apps/api/plane/db/models/estimate.py b/apps/api/plane/db/models/estimate.py index ded6f97bcf3..fb472a69bd4 100644 --- a/apps/api/plane/db/models/estimate.py +++ b/apps/api/plane/db/models/estimate.py @@ -10,11 +10,15 @@ # Module imports from .project import ProjectBaseModel +class EstimateType(models.TextChoices): + CATEGORIES = "categories", "Categories" + POINTS = "points", "Points" + class Estimate(ProjectBaseModel): name = models.CharField(max_length=255) description = models.TextField(verbose_name="Estimate Description", blank=True) - type = models.CharField(max_length=255, default="categories") + type = models.CharField(max_length=255, choices=EstimateType.choices, default=EstimateType.CATEGORIES) last_used = models.BooleanField(default=False) def __str__(self): diff --git a/apps/api/plane/license/api/views/configuration.py b/apps/api/plane/license/api/views/configuration.py index bb9a9e00ee6..c5ad5f5788b 100644 --- a/apps/api/plane/license/api/views/configuration.py +++ b/apps/api/plane/license/api/views/configuration.py @@ -45,7 +45,8 @@ def patch(self, request): bulk_configurations = [] for configuration in configurations: - value = request.data.get(configuration.key, configuration.value) + raw_value = request.data.get(configuration.key, configuration.value) + value = "" if raw_value is None else str(raw_value).strip() if configuration.is_encrypted: configuration.value = encrypt_data(value) else: diff --git a/apps/api/plane/license/api/views/instance.py b/apps/api/plane/license/api/views/instance.py index a0d52d4912f..29c2521abd8 100644 --- a/apps/api/plane/license/api/views/instance.py +++ b/apps/api/plane/license/api/views/instance.py @@ -63,8 +63,6 @@ def get(self, request): POSTHOG_HOST, UNSPLASH_ACCESS_KEY, LLM_API_KEY, - IS_INTERCOM_ENABLED, - INTERCOM_APP_ID, ) = get_configuration_value( [ { @@ -124,15 +122,6 @@ def get(self, request): "key": "LLM_API_KEY", "default": os.environ.get("LLM_API_KEY", ""), }, - # Intercom settings - { - "key": "IS_INTERCOM_ENABLED", - "default": os.environ.get("IS_INTERCOM_ENABLED", "1"), - }, - { - "key": "INTERCOM_APP_ID", - "default": os.environ.get("INTERCOM_APP_ID", ""), - }, ] ) @@ -169,10 +158,6 @@ def get(self, request): # is smtp configured data["is_smtp_configured"] = bool(EMAIL_HOST) - # Intercom settings - data["is_intercom_enabled"] = IS_INTERCOM_ENABLED == "1" - data["intercom_app_id"] = INTERCOM_APP_ID - # Base URL data["admin_base_url"] = settings.ADMIN_BASE_URL data["space_base_url"] = settings.SPACE_BASE_URL diff --git a/apps/api/plane/tests/unit/bg_tasks/test_work_item_link_task.py b/apps/api/plane/tests/unit/bg_tasks/test_work_item_link_task.py new file mode 100644 index 00000000000..2838260e890 --- /dev/null +++ b/apps/api/plane/tests/unit/bg_tasks/test_work_item_link_task.py @@ -0,0 +1,126 @@ +# Copyright (c) 2023-present Plane Software, Inc. and contributors +# SPDX-License-Identifier: AGPL-3.0-only +# See the LICENSE file for details. + +import pytest +from unittest.mock import patch, MagicMock +from plane.bgtasks.work_item_link_task import safe_get, validate_url_ip + + +def _make_response(status_code=200, headers=None, is_redirect=False, content=b""): + """Create a mock requests.Response.""" + resp = MagicMock() + resp.status_code = status_code + resp.is_redirect = is_redirect + resp.headers = headers or {} + resp.content = content + return resp + + +@pytest.mark.unit +class TestValidateUrlIp: + """Test validate_url_ip blocks private/internal IPs.""" + + def test_rejects_private_ip(self): + with patch("plane.bgtasks.work_item_link_task.socket.getaddrinfo") as mock_dns: + mock_dns.return_value = [(None, None, None, None, ("192.168.1.1", 0))] + with pytest.raises(ValueError, match="private/internal"): + validate_url_ip("http://example.com") + + def test_rejects_loopback(self): + with patch("plane.bgtasks.work_item_link_task.socket.getaddrinfo") as mock_dns: + mock_dns.return_value = [(None, None, None, None, ("127.0.0.1", 0))] + with pytest.raises(ValueError, match="private/internal"): + validate_url_ip("http://example.com") + + def test_rejects_non_http_scheme(self): + with pytest.raises(ValueError, match="Only HTTP and HTTPS"): + validate_url_ip("file:///etc/passwd") + + def test_allows_public_ip(self): + with patch("plane.bgtasks.work_item_link_task.socket.getaddrinfo") as mock_dns: + mock_dns.return_value = [(None, None, None, None, ("93.184.216.34", 0))] + validate_url_ip("https://example.com") # Should not raise + + +@pytest.mark.unit +class TestSafeGet: + """Test safe_get follows redirects safely and blocks SSRF.""" + + @patch("plane.bgtasks.work_item_link_task.requests.get") + @patch("plane.bgtasks.work_item_link_task.validate_url_ip") + def test_returns_response_for_non_redirect(self, mock_validate, mock_get): + final_resp = _make_response(status_code=200, content=b"OK") + mock_get.return_value = final_resp + + response, final_url = safe_get("https://example.com") + + assert response is final_resp + assert final_url == "https://example.com" + mock_validate.assert_called_once_with("https://example.com") + + @patch("plane.bgtasks.work_item_link_task.requests.get") + @patch("plane.bgtasks.work_item_link_task.validate_url_ip") + def test_follows_redirect_and_validates_each_hop(self, mock_validate, mock_get): + redirect_resp = _make_response( + status_code=301, + is_redirect=True, + headers={"Location": "https://other.com/page"}, + ) + final_resp = _make_response(status_code=200, content=b"OK") + mock_get.side_effect = [redirect_resp, final_resp] + + response, final_url = safe_get("https://example.com") + + assert response is final_resp + assert final_url == "https://other.com/page" + # Should validate both the initial URL and the redirect target + assert mock_validate.call_count == 2 + mock_validate.assert_any_call("https://example.com") + mock_validate.assert_any_call("https://other.com/page") + + @patch("plane.bgtasks.work_item_link_task.requests.get") + @patch("plane.bgtasks.work_item_link_task.validate_url_ip") + def test_blocks_redirect_to_private_ip(self, mock_validate, mock_get): + redirect_resp = _make_response( + status_code=302, + is_redirect=True, + headers={"Location": "http://192.168.1.1:8080"}, + ) + mock_get.return_value = redirect_resp + # First call (initial URL) succeeds, second call (redirect target) fails + mock_validate.side_effect = [None, ValueError("Access to private/internal networks is not allowed")] + + with pytest.raises(ValueError, match="private/internal"): + safe_get("https://evil.com/redirect") + + @patch("plane.bgtasks.work_item_link_task.requests.get") + @patch("plane.bgtasks.work_item_link_task.validate_url_ip") + def test_raises_on_too_many_redirects(self, mock_validate, mock_get): + redirect_resp = _make_response( + status_code=302, + is_redirect=True, + headers={"Location": "https://example.com/loop"}, + ) + mock_get.return_value = redirect_resp + + with pytest.raises(RuntimeError, match="Too many redirects"): + safe_get("https://example.com/start") + + @patch("plane.bgtasks.work_item_link_task.requests.get") + @patch("plane.bgtasks.work_item_link_task.validate_url_ip") + def test_succeeds_at_exact_max_redirects(self, mock_validate, mock_get): + """After exactly MAX_REDIRECTS hops, if the final response is 200, it should succeed.""" + redirect_resp = _make_response( + status_code=302, + is_redirect=True, + headers={"Location": "https://example.com/next"}, + ) + final_resp = _make_response(status_code=200, content=b"OK") + # 5 redirects then a 200 + mock_get.side_effect = [redirect_resp] * 5 + [final_resp] + + response, final_url = safe_get("https://example.com/start") + + assert response is final_resp + assert not response.is_redirect diff --git a/apps/api/plane/utils/analytics_plot.py b/apps/api/plane/utils/analytics_plot.py index acd86aca868..5a09f12fdb6 100644 --- a/apps/api/plane/utils/analytics_plot.py +++ b/apps/api/plane/utils/analytics_plot.py @@ -22,6 +22,23 @@ # Module imports from plane.db.models import Issue, Project +VALID_ANALYTICS_FIELDS = [ + "state_id", + "state__group", + "labels__id", + "assignees__id", + "estimate_point__value", + "issue_cycle__cycle_id", + "issue_module__module_id", + "priority", + "start_date", + "target_date", + "created_at", + "completed_at", +] + +VALID_YAXIS = ["issue_count", "estimate"] + def annotate_with_monthly_dimension(queryset, field_name, attribute): # Get the year and the months @@ -34,6 +51,8 @@ def annotate_with_monthly_dimension(queryset, field_name, attribute): def extract_axis(queryset, x_axis): + if x_axis not in VALID_ANALYTICS_FIELDS: + raise ValueError(f"Invalid x_axis value: {x_axis}") # Format the dimension when the axis is in date if x_axis in ["created_at", "start_date", "target_date", "completed_at"]: queryset = annotate_with_monthly_dimension(queryset, x_axis, "dimension") @@ -52,6 +71,13 @@ def sort_data(data, temp_axis): def build_graph_plot(queryset, x_axis, y_axis, segment=None): + if x_axis not in VALID_ANALYTICS_FIELDS: + raise ValueError(f"Invalid x_axis value: {x_axis}") + if y_axis not in VALID_YAXIS: + raise ValueError(f"Invalid y_axis value: {y_axis}") + if segment and segment not in VALID_ANALYTICS_FIELDS: + raise ValueError(f"Invalid segment value: {segment}") + # temp x_axis temp_axis = x_axis # Extract the x_axis and queryset diff --git a/apps/api/plane/utils/instance_config_variables/core.py b/apps/api/plane/utils/instance_config_variables/core.py index 274c6539af9..6eebf0b3adb 100644 --- a/apps/api/plane/utils/instance_config_variables/core.py +++ b/apps/api/plane/utils/instance_config_variables/core.py @@ -232,21 +232,6 @@ }, ] -intercom_config_variables = [ - { - "key": "IS_INTERCOM_ENABLED", - "value": os.environ.get("IS_INTERCOM_ENABLED", "1"), - "category": "INTERCOM", - "is_encrypted": False, - }, - { - "key": "INTERCOM_APP_ID", - "value": os.environ.get("INTERCOM_APP_ID", ""), - "category": "INTERCOM", - "is_encrypted": False, - }, -] - core_config_variables = [ *authentication_config_variables, *workspace_management_config_variables, @@ -257,5 +242,4 @@ *smtp_config_variables, *llm_config_variables, *unsplash_config_variables, - *intercom_config_variables, ] diff --git a/apps/api/plane/utils/openapi/__init__.py b/apps/api/plane/utils/openapi/__init__.py index d54caf584eb..090d076ecd1 100644 --- a/apps/api/plane/utils/openapi/__init__.py +++ b/apps/api/plane/utils/openapi/__init__.py @@ -47,6 +47,7 @@ CYCLE_VIEW_PARAMETER, FIELDS_PARAMETER, EXPAND_PARAMETER, + ESTIMATE_ID_PARAMETER, ) # Responses @@ -126,6 +127,10 @@ STATE_UPDATE_EXAMPLE, INTAKE_ISSUE_CREATE_EXAMPLE, INTAKE_ISSUE_UPDATE_EXAMPLE, + ESTIMATE_CREATE_EXAMPLE, + ESTIMATE_UPDATE_EXAMPLE, + ESTIMATE_POINT_CREATE_EXAMPLE, + ESTIMATE_POINT_UPDATE_EXAMPLE, # Response Examples CYCLE_EXAMPLE, TRANSFER_CYCLE_ISSUE_SUCCESS_EXAMPLE, @@ -145,6 +150,8 @@ PROJECT_MEMBER_EXAMPLE, CYCLE_ISSUE_EXAMPLE, STICKY_EXAMPLE, + ESTIMATE_EXAMPLE, + ESTIMATE_POINT_EXAMPLE, ) # Helper decorators @@ -157,6 +164,7 @@ user_docs, cycle_docs, work_item_docs, + work_item_relation_docs, label_docs, issue_link_docs, issue_comment_docs, @@ -165,6 +173,8 @@ module_docs, module_issue_docs, state_docs, + estimate_docs, + estimate_point_docs, ) # Schema processing hooks @@ -206,6 +216,7 @@ "CYCLE_VIEW_PARAMETER", "FIELDS_PARAMETER", "EXPAND_PARAMETER", + "ESTIMATE_ID_PARAMETER", # Responses "UNAUTHORIZED_RESPONSE", "FORBIDDEN_RESPONSE", @@ -279,6 +290,10 @@ "STATE_UPDATE_EXAMPLE", "INTAKE_ISSUE_CREATE_EXAMPLE", "INTAKE_ISSUE_UPDATE_EXAMPLE", + "ESTIMATE_CREATE_EXAMPLE", + "ESTIMATE_UPDATE_EXAMPLE", + "ESTIMATE_POINT_CREATE_EXAMPLE", + "ESTIMATE_POINT_UPDATE_EXAMPLE", # Response Examples "CYCLE_EXAMPLE", "TRANSFER_CYCLE_ISSUE_SUCCESS_EXAMPLE", @@ -298,6 +313,8 @@ "PROJECT_MEMBER_EXAMPLE", "CYCLE_ISSUE_EXAMPLE", "STICKY_EXAMPLE", + "ESTIMATE_EXAMPLE", + "ESTIMATE_POINT_EXAMPLE", # Decorators "workspace_docs", "project_docs", @@ -307,6 +324,7 @@ "user_docs", "cycle_docs", "work_item_docs", + "work_item_relation_docs", "label_docs", "issue_link_docs", "issue_comment_docs", @@ -315,6 +333,8 @@ "module_docs", "module_issue_docs", "state_docs", + "estimate_docs", + "estimate_point_docs", # Hooks "preprocess_filter_api_v1_paths", "generate_operation_summary", diff --git a/apps/api/plane/utils/openapi/decorators.py b/apps/api/plane/utils/openapi/decorators.py index 8b016f4c016..7ded9fb10b3 100644 --- a/apps/api/plane/utils/openapi/decorators.py +++ b/apps/api/plane/utils/openapi/decorators.py @@ -223,6 +223,21 @@ def issue_attachment_docs(**kwargs): return extend_schema(**_merge_schema_options(defaults, kwargs)) +def work_item_relation_docs(**kwargs): + """Decorator for work item relation endpoints""" + defaults = { + "tags": ["Work Item Relations"], + "parameters": [WORKSPACE_SLUG_PARAMETER, PROJECT_ID_PARAMETER], + "responses": { + 401: UNAUTHORIZED_RESPONSE, + 403: FORBIDDEN_RESPONSE, + 404: NOT_FOUND_RESPONSE, + }, + } + + return extend_schema(**_merge_schema_options(defaults, kwargs)) + + def module_docs(**kwargs): """Decorator for module management endpoints""" defaults = { @@ -282,3 +297,29 @@ def sticky_docs(**kwargs): } return extend_schema(**_merge_schema_options(defaults, kwargs)) + +def estimate_docs(**kwargs): + """Decorator for estimate-related endpoints""" + defaults = { + "tags": ["Estimates"], + "parameters": [WORKSPACE_SLUG_PARAMETER, PROJECT_ID_PARAMETER], + "responses": { + 401: UNAUTHORIZED_RESPONSE, + 403: FORBIDDEN_RESPONSE, + 404: NOT_FOUND_RESPONSE, + }, + } + return extend_schema(**_merge_schema_options(defaults, kwargs)) + +def estimate_point_docs(**kwargs): + """Decorator for estimate point-related endpoints""" + defaults = { + "tags": ["Estimate Points"], + "parameters": [WORKSPACE_SLUG_PARAMETER, PROJECT_ID_PARAMETER], + "responses": { + 401: UNAUTHORIZED_RESPONSE, + 403: FORBIDDEN_RESPONSE, + 404: NOT_FOUND_RESPONSE, + }, + } + return extend_schema(**_merge_schema_options(defaults, kwargs)) \ No newline at end of file diff --git a/apps/api/plane/utils/openapi/examples.py b/apps/api/plane/utils/openapi/examples.py index 5a2188e6951..20aff18958a 100644 --- a/apps/api/plane/utils/openapi/examples.py +++ b/apps/api/plane/utils/openapi/examples.py @@ -686,6 +686,69 @@ }, ) +# Estimate Examples +ESTIMATE_EXAMPLE = OpenApiExample( + name="Estimate", + value={ + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Estimate 1", + "description": "Estimate 1 description", + }, + description="Example response for an estimate", +) + +ESTIMATE_POINT_EXAMPLE = OpenApiExample( + name="EstimatePoint", + value={ + "id": "550e8400-e29b-41d4-a716-446655440000", + "estimate": "550e8400-e29b-41d4-a716-446655440001", + "key": 1, + "value": "1", + }, + description="Example response for an estimate point", +) +ESTIMATE_CREATE_EXAMPLE = OpenApiExample( + name="EstimateCreateSerializer", + value={ + "name": "Estimate 1", + "description": "Estimate 1 description", + }, + description="Example request for creating an estimate", +) +ESTIMATE_UPDATE_EXAMPLE = OpenApiExample( + name="EstimateUpdateSerializer", + value={ + "name": "Estimate 1", + "description": "Estimate 1 description", + }, + description="Example request for updating an estimate", +) + +# Estimate Point Examples +ESTIMATE_POINT_CREATE_EXAMPLE = OpenApiExample( + name="EstimatePointCreateSerializer", + value=[ + { + "value": "1", + "description": "Estimate Point 1 description", + }, + { + "value": "2", + "description": "Estimate Point 2 description", + }, + ], + description="Example request for creating an estimate point", +) +ESTIMATE_POINT_UPDATE_EXAMPLE = OpenApiExample( + name="EstimatePointUpdateSerializer", + value={ + "value": "1", + "description": "Estimate Point 1 description", + }, + description="Example request for updating an estimate point", +) + + # Sample data for different entity types SAMPLE_ISSUE = { "id": "550e8400-e29b-41d4-a716-446655440000", @@ -801,6 +864,24 @@ "created_at": "2024-01-01T10:30:00Z", } +SAMPLE_ESTIMATE = { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Estimate 1", + "description": "Estimate 1 description", + "type": "categories", + "last_used": False, + "created_at": "2024-01-01T10:30:00Z", +} + +SAMPLE_ESTIMATE_POINT = { + "id": "550e8400-e29b-41d4-a716-446655440000", + "estimate": "550e8400-e29b-41d4-a716-446655440001", + "key": 1, + "value": "1", + "description": "Estimate Point 1 description", + "created_at": "2024-01-01T10:30:00Z", +} + # Mapping of schema types to sample data SCHEMA_EXAMPLES = { "Issue": SAMPLE_ISSUE, @@ -816,6 +897,8 @@ "Intake": SAMPLE_INTAKE, "CycleIssue": SAMPLE_CYCLE_ISSUE, "Sticky": SAMPLE_STICKY, + "Estimate": SAMPLE_ESTIMATE, + "EstimatePoint": SAMPLE_ESTIMATE_POINT, } diff --git a/apps/api/plane/utils/openapi/parameters.py b/apps/api/plane/utils/openapi/parameters.py index d0ceba6c526..2812892ec91 100644 --- a/apps/api/plane/utils/openapi/parameters.py +++ b/apps/api/plane/utils/openapi/parameters.py @@ -495,3 +495,11 @@ ), ], ) + +ESTIMATE_ID_PARAMETER = OpenApiParameter( + name="estimate_id", + description="Estimate ID", + required=True, + type=OpenApiTypes.UUID, + location=OpenApiParameter.PATH, +) diff --git a/apps/api/requirements/base.txt b/apps/api/requirements/base.txt index 02c509ea14d..7778a71a353 100644 --- a/apps/api/requirements/base.txt +++ b/apps/api/requirements/base.txt @@ -1,7 +1,7 @@ # base requirements # django -Django==4.2.29 +Django==4.2.30 # rest framework djangorestframework==3.15.2 # postgres @@ -51,7 +51,7 @@ beautifulsoup4==4.12.3 # analytics posthog==3.5.0 # crypto -cryptography==46.0.5 +cryptography==46.0.7 # html validator lxml==6.0.0 # s3 @@ -61,7 +61,7 @@ zxcvbn==4.4.28 # timezone pytz==2024.1 # jwt -PyJWT==2.8.0 +PyJWT==2.12.0 # OpenTelemetry opentelemetry-api==1.28.1 opentelemetry-sdk==1.28.1 diff --git a/apps/api/requirements/test.txt b/apps/api/requirements/test.txt index 7c242c806ab..bed38224a2f 100644 --- a/apps/api/requirements/test.txt +++ b/apps/api/requirements/test.txt @@ -1,6 +1,6 @@ -r base.txt # test framework -pytest==9.0.2 +pytest==9.0.3 pytest-django==4.5.2 pytest-cov==4.1.0 pytest-xdist==3.3.1 @@ -9,4 +9,4 @@ factory-boy==3.3.0 freezegun==1.2.2 coverage==7.2.7 httpx==0.24.1 -requests==2.32.4 \ No newline at end of file +requests==2.33.0 \ No newline at end of file diff --git a/apps/api/templates/emails/invitations/project_invitation.html b/apps/api/templates/emails/invitations/project_invitation.html index 36aecd60d82..f18579c6459 100644 --- a/apps/api/templates/emails/invitations/project_invitation.html +++ b/apps/api/templates/emails/invitations/project_invitation.html @@ -261,7 +261,7 @@ ­ - + ­ diff --git a/apps/api/templates/emails/notifications/issue-updates.html b/apps/api/templates/emails/notifications/issue-updates.html index c6fe3b2786c..d82614ded61 100644 --- a/apps/api/templates/emails/notifications/issue-updates.html +++ b/apps/api/templates/emails/notifications/issue-updates.html @@ -233,7 +233,7 @@
This email was sent to {{ receiver.email }}. If you'd rather not receive this kind of email, you can unsubscribe to the {{entity_type}} or manage your email preferences. - +
diff --git a/apps/api/templates/emails/notifications/webhook-deactivate.html b/apps/api/templates/emails/notifications/webhook-deactivate.html index 44aca67203a..c094eaa7636 100644 --- a/apps/api/templates/emails/notifications/webhook-deactivate.html +++ b/apps/api/templates/emails/notifications/webhook-deactivate.html @@ -155,7 +155,7 @@ ­
-

Despite our popularity, we are humbly early-stage. We are shipping fast, so please reach out to us with feature requests, major and minor nits, and anything else you find missing. We read every message, tweet, and conversation and update our public roadmap.

+

Despite our popularity, we are humbly early-stage. We are shipping fast, so please reach out to us with feature requests, major and minor nits, and anything else you find missing. We read every message, tweet, and conversation and update our public roadmap.

­ @@ -220,7 +220,7 @@ - + diff --git a/apps/api/templates/emails/user/email_updated.html b/apps/api/templates/emails/user/email_updated.html index cd13347ead2..cb1cad45966 100644 --- a/apps/api/templates/emails/user/email_updated.html +++ b/apps/api/templates/emails/user/email_updated.html @@ -831,7 +831,7 @@ " > , , ; } diff --git a/apps/space/hooks/use-editor-flagging.ts b/apps/space/hooks/use-editor-flagging.ts index f796845170d..88e82f76979 100644 --- a/apps/space/hooks/use-editor-flagging.ts +++ b/apps/space/hooks/use-editor-flagging.ts @@ -25,7 +25,7 @@ export type TEditorFlaggingHookReturnType = { /** * @description extensions disabled in various editors */ -export const useEditorFlagging = (anchor: string): TEditorFlaggingHookReturnType => ({ +export const useEditorFlagging = (_anchor: string): TEditorFlaggingHookReturnType => ({ document: { disabled: [], flagged: [], diff --git a/apps/space/package.json b/apps/space/package.json index ac3f7acae58..4500152f7d1 100644 --- a/apps/space/package.json +++ b/apps/space/package.json @@ -1,6 +1,6 @@ { "name": "space", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -53,7 +53,6 @@ "uuid": "catalog:" }, "devDependencies": { - "@dotenvx/dotenvx": "catalog:", "@plane/tailwind-config": "workspace:*", "@plane/typescript-config": "workspace:*", "@react-router/dev": "catalog:", @@ -62,6 +61,7 @@ "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "dotenv": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "^5.1.4" diff --git a/apps/space/store/cycle.store.ts b/apps/space/store/cycle.store.ts index 41ef8d0d436..13cb6950a5b 100644 --- a/apps/space/store/cycle.store.ts +++ b/apps/space/store/cycle.store.ts @@ -9,7 +9,7 @@ import { action, makeObservable, observable, runInAction } from "mobx"; import { SitesCycleService } from "@plane/services"; import type { TPublicCycle } from "@/types/cycle"; // store -import type { CoreRootStore } from "./root.store"; +import type { RootStore } from "./root.store"; export interface ICycleStore { // observables @@ -23,9 +23,9 @@ export interface ICycleStore { export class CycleStore implements ICycleStore { cycles: TPublicCycle[] | undefined = undefined; cycleService: SitesCycleService; - rootStore: CoreRootStore; + rootStore: RootStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observables cycles: observable, diff --git a/apps/space/store/helpers/base-issues.store.ts b/apps/space/store/helpers/base-issues.store.ts index b1c342308e8..e0fdb564c60 100644 --- a/apps/space/store/helpers/base-issues.store.ts +++ b/apps/space/store/helpers/base-issues.store.ts @@ -23,7 +23,7 @@ import type { } from "@plane/types"; // types import type { IIssue, TIssuesResponse } from "@/types/issue"; -import type { CoreRootStore } from "../root.store"; +import type { RootStore } from "../root.store"; // constants // helpers @@ -81,7 +81,7 @@ export abstract class BaseIssuesStore implements IBaseIssuesStore { // root store rootIssueStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observable loader: observable, diff --git a/apps/space/store/instance.store.ts b/apps/space/store/instance.store.ts index 3672c5f0081..37dc9318eac 100644 --- a/apps/space/store/instance.store.ts +++ b/apps/space/store/instance.store.ts @@ -10,7 +10,7 @@ import { observable, action, makeObservable, runInAction } from "mobx"; import { InstanceService } from "@plane/services"; import type { IInstance, IInstanceConfig } from "@plane/types"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; type TError = { status: string; @@ -40,7 +40,7 @@ export class InstanceStore implements IInstanceStore { // services instanceService; - constructor(private store: CoreRootStore) { + constructor(private store: RootStore) { makeObservable(this, { // observable isLoading: observable.ref, diff --git a/apps/space/store/issue-detail.store.ts b/apps/space/store/issue-detail.store.ts index 0840e70c00a..6cbb6c867b3 100644 --- a/apps/space/store/issue-detail.store.ts +++ b/apps/space/store/issue-detail.store.ts @@ -13,7 +13,7 @@ import { SitesFileService, SitesIssueService } from "@plane/services"; import type { TFileSignedURLResponse, TIssuePublicComment } from "@plane/types"; import { EFileAssetType } from "@plane/types"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; // types import type { IIssue, IPeekMode, IVote } from "@/types/issue"; @@ -60,12 +60,12 @@ export class IssueDetailStore implements IIssueDetailStore { [key: string]: IIssue; } = {}; // root store - rootStore: CoreRootStore; + rootStore: RootStore; // services issueService: SitesIssueService; fileService: SitesFileService; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { loader: observable.ref, error: observable.ref, diff --git a/apps/space/store/issue-filters.store.ts b/apps/space/store/issue-filters.store.ts index 1632a0b3ea2..e2cb514dead 100644 --- a/apps/space/store/issue-filters.store.ts +++ b/apps/space/store/issue-filters.store.ts @@ -11,7 +11,7 @@ import { computedFn } from "mobx-utils"; import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "@plane/constants"; import type { IssuePaginationOptions, TIssueParams } from "@plane/types"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; // types import type { TIssueLayoutOptions, @@ -60,7 +60,7 @@ export class IssueFilterStore implements IIssueFilterStore { }; filters: { [anchor: string]: TIssueFilters } | undefined = undefined; - constructor(private store: CoreRootStore) { + constructor(private store: RootStore) { makeObservable(this, { // observables layoutOptions: observable, diff --git a/apps/space/store/issue.store.ts b/apps/space/store/issue.store.ts index 27ed2ad8951..93556bc8068 100644 --- a/apps/space/store/issue.store.ts +++ b/apps/space/store/issue.store.ts @@ -9,7 +9,7 @@ import { action, makeObservable, runInAction } from "mobx"; import { SitesIssueService } from "@plane/services"; import type { IssuePaginationOptions, TLoader } from "@plane/types"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; // types import { BaseIssuesStore } from "./helpers/base-issues.store"; import type { IBaseIssuesStore } from "./helpers/base-issues.store"; @@ -28,11 +28,11 @@ export interface IIssueStore extends IBaseIssuesStore { export class IssueStore extends BaseIssuesStore implements IIssueStore { // root store - rootStore: CoreRootStore; + rootStore: RootStore; // services issueService: SitesIssueService; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { super(_rootStore); makeObservable(this, { // actions diff --git a/apps/space/store/label.store.ts b/apps/space/store/label.store.ts index b720816cf13..b1c229f0ae9 100644 --- a/apps/space/store/label.store.ts +++ b/apps/space/store/label.store.ts @@ -10,7 +10,7 @@ import { action, computed, makeObservable, observable, runInAction } from "mobx" import { SitesLabelService } from "@plane/services"; import type { IIssueLabel } from "@plane/types"; // store -import type { CoreRootStore } from "./root.store"; +import type { RootStore } from "./root.store"; export interface IIssueLabelStore { // observables @@ -25,9 +25,9 @@ export interface IIssueLabelStore { export class LabelStore implements IIssueLabelStore { labelMap: Record = {}; labelService: SitesLabelService; - rootStore: CoreRootStore; + rootStore: RootStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observables labelMap: observable, diff --git a/apps/space/store/members.store.ts b/apps/space/store/members.store.ts index 5c429b0037e..a06d0055049 100644 --- a/apps/space/store/members.store.ts +++ b/apps/space/store/members.store.ts @@ -9,7 +9,7 @@ import { action, computed, makeObservable, observable, runInAction } from "mobx" // plane imports import { SitesMemberService } from "@plane/services"; import type { TPublicMember } from "@/types/member"; -import type { CoreRootStore } from "./root.store"; +import type { RootStore } from "./root.store"; export interface IIssueMemberStore { // observables @@ -24,9 +24,9 @@ export interface IIssueMemberStore { export class MemberStore implements IIssueMemberStore { memberMap: Record = {}; memberService: SitesMemberService; - rootStore: CoreRootStore; + rootStore: RootStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observables memberMap: observable, diff --git a/apps/space/store/module.store.ts b/apps/space/store/module.store.ts index 1f2dd2d54a6..c539846efc0 100644 --- a/apps/space/store/module.store.ts +++ b/apps/space/store/module.store.ts @@ -11,7 +11,7 @@ import { SitesModuleService } from "@plane/services"; // types import type { TPublicModule } from "@/types/modules"; // root store -import type { CoreRootStore } from "./root.store"; +import type { RootStore } from "./root.store"; export interface IIssueModuleStore { // observables @@ -26,9 +26,9 @@ export interface IIssueModuleStore { export class ModuleStore implements IIssueModuleStore { moduleMap: Record = {}; moduleService: SitesModuleService; - rootStore: CoreRootStore; + rootStore: RootStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observables moduleMap: observable, diff --git a/apps/space/store/profile.store.ts b/apps/space/store/profile.store.ts index 0dee248dda5..d62d1d37a38 100644 --- a/apps/space/store/profile.store.ts +++ b/apps/space/store/profile.store.ts @@ -11,7 +11,7 @@ import { UserService } from "@plane/services"; import type { TUserProfile } from "@plane/types"; import { EStartOfTheWeek } from "@plane/types"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; type TError = { status: string; @@ -64,7 +64,7 @@ export class ProfileStore implements IProfileStore { // services userService: UserService; - constructor(public store: CoreRootStore) { + constructor(public store: RootStore) { makeObservable(this, { // observables isLoading: observable.ref, diff --git a/apps/space/store/publish/publish.store.ts b/apps/space/store/publish/publish.store.ts index b59ff2be230..973ea86e589 100644 --- a/apps/space/store/publish/publish.store.ts +++ b/apps/space/store/publish/publish.store.ts @@ -14,7 +14,7 @@ import type { TProjectPublishViewProps, } from "@plane/types"; // store -import type { CoreRootStore } from "../root.store"; +import type { RootStore } from "../root.store"; export interface IPublishStore extends TProjectPublishSettings { // computed @@ -45,7 +45,7 @@ export class PublishStore implements IPublishStore { workspace_detail: IWorkspaceLite | undefined; constructor( - private store: CoreRootStore, + private store: RootStore, publishSettings: TProjectPublishSettings ) { this.anchor = publishSettings.anchor; diff --git a/apps/space/store/publish/publish_list.store.ts b/apps/space/store/publish/publish_list.store.ts index 29a09dca17e..eeebe97e70a 100644 --- a/apps/space/store/publish/publish_list.store.ts +++ b/apps/space/store/publish/publish_list.store.ts @@ -11,7 +11,7 @@ import { SitesProjectPublishService } from "@plane/services"; import type { TProjectPublishSettings } from "@plane/types"; // store import { PublishStore } from "@/store/publish/publish.store"; -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; export interface IPublishListStore { // observables @@ -26,7 +26,7 @@ export class PublishListStore implements IPublishListStore { // service publishService; - constructor(private rootStore: CoreRootStore) { + constructor(private rootStore: RootStore) { makeObservable(this, { // observables publishMap: observable, diff --git a/apps/space/store/state.store.ts b/apps/space/store/state.store.ts index f900c5105f7..3ecf78d1592 100644 --- a/apps/space/store/state.store.ts +++ b/apps/space/store/state.store.ts @@ -12,7 +12,7 @@ import type { IState } from "@plane/types"; // helpers import { sortStates } from "@/helpers/state.helper"; // store -import type { CoreRootStore } from "./root.store"; +import type { RootStore } from "./root.store"; export interface IStateStore { // observables @@ -28,9 +28,9 @@ export interface IStateStore { export class StateStore implements IStateStore { states: IState[] | undefined = undefined; stateService: SitesStateService; - rootStore: CoreRootStore; + rootStore: RootStore; - constructor(_rootStore: CoreRootStore) { + constructor(_rootStore: RootStore) { makeObservable(this, { // observables states: observable, diff --git a/apps/space/store/user.store.ts b/apps/space/store/user.store.ts index fac64281ead..f2a3c7dbc20 100644 --- a/apps/space/store/user.store.ts +++ b/apps/space/store/user.store.ts @@ -14,7 +14,7 @@ import type { ActorDetail, IUser } from "@plane/types"; import type { IProfileStore } from "@/store/profile.store"; import { ProfileStore } from "@/store/profile.store"; // store -import type { CoreRootStore } from "@/store/root.store"; +import type { RootStore } from "@/store/root.store"; type TUserErrorStatus = { status: string; @@ -50,7 +50,7 @@ export class UserStore implements IUserStore { // service userService: UserService; - constructor(private store: CoreRootStore) { + constructor(private store: RootStore) { // stores this.profile = new ProfileStore(store); // service diff --git a/apps/space/vite.config.ts b/apps/space/vite.config.ts index 5368af0761c..1767562cec3 100644 --- a/apps/space/vite.config.ts +++ b/apps/space/vite.config.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import * as dotenv from "@dotenvx/dotenvx"; +import * as dotenv from "dotenv"; import { reactRouter } from "@react-router/dev/vite"; import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; diff --git a/apps/web/Dockerfile.web b/apps/web/Dockerfile.web index ab1a4046296..38af19e74ba 100644 --- a/apps/web/Dockerfile.web +++ b/apps/web/Dockerfile.web @@ -14,7 +14,7 @@ RUN apk add --no-cache libc6-compat # Set working directory WORKDIR /app -ARG TURBO_VERSION=2.8.12 +ARG TURBO_VERSION=2.9.4 RUN corepack enable pnpm && pnpm add -g turbo@${TURBO_VERSION} COPY . . diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/_sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/_sidebar.tsx index bbbea873523..173b1fb0e09 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/_sidebar.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/_sidebar.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx index 62c1c162154..296b780c91e 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx @@ -5,7 +5,6 @@ */ // ui -import type { FC } from "react"; import { observer } from "mobx-react"; import { useParams, useRouter } from "next/navigation"; import { PanelRight } from "lucide-react"; @@ -14,7 +13,6 @@ import { useTranslation } from "@plane/i18n"; import { YourWorkIcon, ChevronDownIcon } from "@plane/propel/icons"; import type { IUserProfileProjectSegregation } from "@plane/types"; import { Breadcrumbs, Header, CustomMenu } from "@plane/ui"; -import { cn } from "@plane/utils"; // components import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; import { ProfileIssuesFilter } from "@/components/profile/profile-issues-filter"; diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx index 26c4734c734..c529c4efe9f 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; // plane helpers diff --git a/apps/web/app/(all)/invitations/page.tsx b/apps/web/app/(all)/invitations/page.tsx index 6921f5b841a..dc1e45cc2d7 100644 --- a/apps/web/app/(all)/invitations/page.tsx +++ b/apps/web/app/(all)/invitations/page.tsx @@ -81,7 +81,6 @@ function UserInvitationsPage() { .then(() => { mutate(USER_WORKSPACES_LIST); const firstInviteId = invitationsRespond[0]; - const invitation = invitations?.find((i) => i.id === firstInviteId); const redirectWorkspace = invitations?.find((i) => i.id === firstInviteId)?.workspace; updateUserProfile({ last_workspace_id: redirectWorkspace?.id }) .then(() => { diff --git a/apps/web/app/assets/auth/gradient-bg-logo.webp b/apps/web/app/assets/auth/gradient-bg-logo.webp new file mode 100644 index 00000000000..47202e562cb Binary files /dev/null and b/apps/web/app/assets/auth/gradient-bg-logo.webp differ diff --git a/apps/web/app/assets/auth/gradient-logo.webp b/apps/web/app/assets/auth/gradient-logo.webp new file mode 100644 index 00000000000..674434ceef7 Binary files /dev/null and b/apps/web/app/assets/auth/gradient-logo.webp differ diff --git a/apps/web/app/provider.tsx b/apps/web/app/provider.tsx index a8a5d27188e..016b66c0e4b 100644 --- a/apps/web/app/provider.tsx +++ b/apps/web/app/provider.tsx @@ -13,8 +13,6 @@ import { TranslationProvider } from "@plane/i18n"; import { Toast } from "@plane/propel/toast"; // helpers import { resolveGeneralTheme } from "@plane/utils"; -// polyfills -import "@/lib/polyfills"; // mobx store provider import { StoreProvider } from "@/lib/store-context"; @@ -31,10 +29,6 @@ const InstanceWrapper = lazy(function InstanceWrapper() { return import("@/lib/wrappers/instance-wrapper"); }); -const ChatSupportModal = lazy(function ChatSupportModal() { - return import("@/components/global/chat-support-modal"); -}); - export interface IAppProvider { children: React.ReactNode; } @@ -53,7 +47,6 @@ export function AppProvider(props: IAppProvider) { - {children} diff --git a/apps/web/ce/components/analytics/use-analytics-tabs.tsx b/apps/web/ce/components/analytics/use-analytics-tabs.tsx index 03877975127..d022d74f0ff 100644 --- a/apps/web/ce/components/analytics/use-analytics-tabs.tsx +++ b/apps/web/ce/components/analytics/use-analytics-tabs.tsx @@ -8,7 +8,7 @@ import { useMemo } from "react"; import { useTranslation } from "@plane/i18n"; import { getAnalyticsTabs } from "./tabs"; -export const useAnalyticsTabs = (workspaceSlug: string) => { +export const useAnalyticsTabs = (_workspaceSlug: string) => { const { t } = useTranslation(); const analyticsTabs = useMemo(() => getAnalyticsTabs(t), [t]); diff --git a/apps/web/ce/components/automations/root.tsx b/apps/web/ce/components/automations/root.tsx index f36f36d3ce1..1baeeb8b0b2 100644 --- a/apps/web/ce/components/automations/root.tsx +++ b/apps/web/ce/components/automations/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; export type TCustomAutomationsRootProps = { diff --git a/apps/web/ce/components/command-palette/modals/work-item-level.tsx b/apps/web/ce/components/command-palette/modals/work-item-level.tsx index cb9d8dc228c..fc83af463a3 100644 --- a/apps/web/ce/components/command-palette/modals/work-item-level.tsx +++ b/apps/web/ce/components/command-palette/modals/work-item-level.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports diff --git a/apps/web/ce/components/common/subscription/subscription-pill.tsx b/apps/web/ce/components/common/subscription/subscription-pill.tsx index f286b870a35..89efebe83be 100644 --- a/apps/web/ce/components/common/subscription/subscription-pill.tsx +++ b/apps/web/ce/components/common/subscription/subscription-pill.tsx @@ -10,6 +10,6 @@ type TProps = { workspace?: IWorkspace; }; -export function SubscriptionPill(props: TProps) { +export function SubscriptionPill(_props: TProps) { return <>; } diff --git a/apps/web/ce/components/cycles/active-cycle/root.tsx b/apps/web/ce/components/cycles/active-cycle/root.tsx index 7c15122e1e1..ab413b8b0a4 100644 --- a/apps/web/ce/components/cycles/active-cycle/root.tsx +++ b/apps/web/ce/components/cycles/active-cycle/root.tsx @@ -46,7 +46,7 @@ type ActiveCyclesComponentProps = { const ActiveCyclesComponent = observer(function ActiveCyclesComponent({ cycleId, activeCycle, - activeCycleResolvedPath, + activeCycleResolvedPath: _activeCycleResolvedPath, workspaceSlug, projectId, handleFiltersUpdate, diff --git a/apps/web/ce/components/cycles/additional-actions.tsx b/apps/web/ce/components/cycles/additional-actions.tsx index 843e9e51e9e..45bc7b5cd58 100644 --- a/apps/web/ce/components/cycles/additional-actions.tsx +++ b/apps/web/ce/components/cycles/additional-actions.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; type Props = { cycleId: string; diff --git a/apps/web/ce/components/cycles/analytics-sidebar/root.tsx b/apps/web/ce/components/cycles/analytics-sidebar/root.tsx index ce0865c4d4e..17501e01d8a 100644 --- a/apps/web/ce/components/cycles/analytics-sidebar/root.tsx +++ b/apps/web/ce/components/cycles/analytics-sidebar/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // components import { SidebarChart } from "./base"; diff --git a/apps/web/ce/components/de-dupe/de-dupe-button.tsx b/apps/web/ce/components/de-dupe/de-dupe-button.tsx index 2060f155661..cfeeeb82ad7 100644 --- a/apps/web/ce/components/de-dupe/de-dupe-button.tsx +++ b/apps/web/ce/components/de-dupe/de-dupe-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // local components @@ -15,7 +14,6 @@ type TDeDupeButtonRoot = { label: string; }; -export function DeDupeButtonRoot(props: TDeDupeButtonRoot) { - const { workspaceSlug, isDuplicateModalOpen, label, handleOnClick } = props; +export function DeDupeButtonRoot(_props: TDeDupeButtonRoot) { return <>; } diff --git a/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx b/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx index 60e3ec924c4..4afbdeca089 100644 --- a/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx +++ b/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // types import type { TDeDupeIssue } from "@plane/types"; @@ -14,7 +13,6 @@ type TDuplicateModalRootProps = { handleDuplicateIssueModal: (value: boolean) => void; }; -export function DuplicateModalRoot(props: TDuplicateModalRootProps) { - const { workspaceSlug, issues, handleDuplicateIssueModal } = props; +export function DuplicateModalRoot(_props: TDuplicateModalRootProps) { return <>; } diff --git a/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx b/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx index 51dfff897f2..146d6b4bc88 100644 --- a/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx +++ b/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // types diff --git a/apps/web/ce/components/de-dupe/issue-block/button-label.tsx b/apps/web/ce/components/de-dupe/issue-block/button-label.tsx index 461187bd099..ae89c7797fb 100644 --- a/apps/web/ce/components/de-dupe/issue-block/button-label.tsx +++ b/apps/web/ce/components/de-dupe/issue-block/button-label.tsx @@ -4,14 +4,11 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type TDeDupeIssueButtonLabelProps = { isOpen: boolean; buttonLabel: string; }; -export function DeDupeIssueButtonLabel(props: TDeDupeIssueButtonLabelProps) { - const { isOpen, buttonLabel } = props; +export function DeDupeIssueButtonLabel(_props: TDeDupeIssueButtonLabelProps) { return <>; } diff --git a/apps/web/ce/components/epics/epic-modal/modal.tsx b/apps/web/ce/components/epics/epic-modal/modal.tsx index 14509d580d8..90d7c9fa34b 100644 --- a/apps/web/ce/components/epics/epic-modal/modal.tsx +++ b/apps/web/ce/components/epics/epic-modal/modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import type { TIssue } from "@plane/types"; @@ -22,6 +21,6 @@ export interface EpicModalProps { isProjectSelectionDisabled?: boolean; } -export function CreateUpdateEpicModal(props: EpicModalProps) { +export function CreateUpdateEpicModal(_props: EpicModalProps) { return <>; } diff --git a/apps/web/ce/components/estimates/inputs/time-input.tsx b/apps/web/ce/components/estimates/inputs/time-input.tsx index f210f0083ac..6eadf418380 100644 --- a/apps/web/ce/components/estimates/inputs/time-input.tsx +++ b/apps/web/ce/components/estimates/inputs/time-input.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - export type TEstimateTimeInputProps = { value?: number; handleEstimateInputValue: (value: string) => void; diff --git a/apps/web/ce/components/estimates/points/delete.tsx b/apps/web/ce/components/estimates/points/delete.tsx index f5969a9392a..c64ee12c1ae 100644 --- a/apps/web/ce/components/estimates/points/delete.tsx +++ b/apps/web/ce/components/estimates/points/delete.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - import type { TEstimatePointsObject, TEstimateSystemKeys, TEstimateTypeErrorObject } from "@plane/types"; export type TEstimatePointDelete = { diff --git a/apps/web/ce/components/estimates/update/modal.tsx b/apps/web/ce/components/estimates/update/modal.tsx index cfb67209771..e0600f32d39 100644 --- a/apps/web/ce/components/estimates/update/modal.tsx +++ b/apps/web/ce/components/estimates/update/modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; type TUpdateEstimateModal = { diff --git a/apps/web/ce/components/gantt-chart/blocks/blocks-list.tsx b/apps/web/ce/components/gantt-chart/blocks/blocks-list.tsx index 2c252ded637..fcb9d0936bd 100644 --- a/apps/web/ce/components/gantt-chart/blocks/blocks-list.tsx +++ b/apps/web/ce/components/gantt-chart/blocks/blocks-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // import type { IBlockUpdateDependencyData } from "@plane/types"; import { GanttChartBlock } from "@/components/gantt-chart/blocks/block"; diff --git a/apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx index 252e3317605..34a8aac7d4a 100644 --- a/apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx +++ b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx @@ -12,6 +12,6 @@ type LeftDependencyDraggableProps = { ganttContainerRef: RefObject; }; -export function LeftDependencyDraggable(props: LeftDependencyDraggableProps) { +export function LeftDependencyDraggable(_props: LeftDependencyDraggableProps) { return <>; } diff --git a/apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx index 059702dd00c..d6badd067db 100644 --- a/apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx +++ b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx @@ -11,6 +11,6 @@ type RightDependencyDraggableProps = { block: IGanttBlock; ganttContainerRef: RefObject; }; -export function RightDependencyDraggable(props: RightDependencyDraggableProps) { +export function RightDependencyDraggable(_props: RightDependencyDraggableProps) { return <>; } diff --git a/apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx b/apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx index 92c531cfef0..6332a71cb25 100644 --- a/apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx +++ b/apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx @@ -4,12 +4,9 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type Props = { isEpic?: boolean; }; -export function TimelineDependencyPaths(props: Props) { - const { isEpic = false } = props; +export function TimelineDependencyPaths(_props: Props) { return <>; } diff --git a/apps/web/ce/components/inbox/source-pill.tsx b/apps/web/ce/components/inbox/source-pill.tsx index a9f23030883..6d7763f8ba9 100644 --- a/apps/web/ce/components/inbox/source-pill.tsx +++ b/apps/web/ce/components/inbox/source-pill.tsx @@ -10,6 +10,6 @@ export type TInboxSourcePill = { source: EInboxIssueSource; }; -export function InboxSourcePill(props: TInboxSourcePill) { +export function InboxSourcePill(_props: TInboxSourcePill) { return <>; } diff --git a/apps/web/ce/components/issues/filters/issue-types.tsx b/apps/web/ce/components/issues/filters/issue-types.tsx index 8c9bc6f0603..db7b06f77f0 100644 --- a/apps/web/ce/components/issues/filters/issue-types.tsx +++ b/apps/web/ce/components/issues/filters/issue-types.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type React from "react"; import { observer } from "mobx-react"; type Props = { diff --git a/apps/web/ce/components/issues/filters/team-project.tsx b/apps/web/ce/components/issues/filters/team-project.tsx index e231da3d15b..f838f4c9481 100644 --- a/apps/web/ce/components/issues/filters/team-project.tsx +++ b/apps/web/ce/components/issues/filters/team-project.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type React from "react"; import { observer } from "mobx-react"; type Props = { diff --git a/apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx b/apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx index d1e200e2224..4c17d1be123 100644 --- a/apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx +++ b/apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane types import type { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; diff --git a/apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx b/apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx index 02cf4611998..626107cdb2b 100644 --- a/apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx +++ b/apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane types import type { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; diff --git a/apps/web/ce/components/issues/issue-detail-widgets/modals.tsx b/apps/web/ce/components/issues/issue-detail-widgets/modals.tsx index 8be9058da3d..9356b772706 100644 --- a/apps/web/ce/components/issues/issue-detail-widgets/modals.tsx +++ b/apps/web/ce/components/issues/issue-detail-widgets/modals.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane types import type { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; diff --git a/apps/web/ce/components/issues/issue-details/additional-activity-root.tsx b/apps/web/ce/components/issues/issue-details/additional-activity-root.tsx index 345811e553d..95804501abb 100644 --- a/apps/web/ce/components/issues/issue-details/additional-activity-root.tsx +++ b/apps/web/ce/components/issues/issue-details/additional-activity-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; export type TAdditionalActivityRoot = { diff --git a/apps/web/ce/components/issues/issue-details/additional-properties.tsx b/apps/web/ce/components/issues/issue-details/additional-properties.tsx index 7f04dde779a..a169a8863a5 100644 --- a/apps/web/ce/components/issues/issue-details/additional-properties.tsx +++ b/apps/web/ce/components/issues/issue-details/additional-properties.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // plane imports diff --git a/apps/web/ce/components/issues/issue-details/issue-creator.tsx b/apps/web/ce/components/issues/issue-details/issue-creator.tsx index 2c25079ad04..56e8e74938d 100644 --- a/apps/web/ce/components/issues/issue-details/issue-creator.tsx +++ b/apps/web/ce/components/issues/issue-details/issue-creator.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import Link from "next/link"; // hooks import { useIssueDetail } from "@/hooks/store/use-issue-detail"; diff --git a/apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx b/apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx index db97243b13d..c6a50531ee7 100644 --- a/apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx +++ b/apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type TIssueAdditionalPropertiesActivity = { activityId: string; ends: "top" | "bottom" | undefined; diff --git a/apps/web/ce/components/issues/issue-details/issue-type-activity.tsx b/apps/web/ce/components/issues/issue-details/issue-type-activity.tsx index d85155aaf1b..08b499f823b 100644 --- a/apps/web/ce/components/issues/issue-details/issue-type-activity.tsx +++ b/apps/web/ce/components/issues/issue-details/issue-type-activity.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; export type TIssueTypeActivity = { activityId: string; showIssue?: boolean; ends: "top" | "bottom" | undefined }; diff --git a/apps/web/ce/components/issues/issue-details/parent-select-root.tsx b/apps/web/ce/components/issues/issue-details/parent-select-root.tsx index 2a1d2b51d09..301b31a9e22 100644 --- a/apps/web/ce/components/issues/issue-details/parent-select-root.tsx +++ b/apps/web/ce/components/issues/issue-details/parent-select-root.tsx @@ -47,7 +47,7 @@ export const IssueParentSelectRoot = observer(function IssueParentSelectRoot(pro await issueOperations.fetch(workspaceSlug, projectId, issueId, false); if (_issueId) await fetchSubIssues(workspaceSlug, projectId, _issueId); toggleParentIssueModal(null); - } catch (error) { + } catch (_error) { console.error("something went wrong while fetching the issue"); } }; @@ -63,7 +63,7 @@ export const IssueParentSelectRoot = observer(function IssueParentSelectRoot(pro await removeSubIssue(workspaceSlug, projectId, parentIssueId, issueId); await fetchSubIssues(workspaceSlug, projectId, parentIssueId); setSubIssueHelpers(parentIssueId, "issue_loader", issueId); - } catch (error) { + } catch (_error) { setToast({ type: TOAST_TYPE.ERROR, title: t("common.error.label"), diff --git a/apps/web/ce/components/issues/issue-layouts/additional-properties.tsx b/apps/web/ce/components/issues/issue-layouts/additional-properties.tsx index 37a5505d447..35c62fed4ac 100644 --- a/apps/web/ce/components/issues/issue-layouts/additional-properties.tsx +++ b/apps/web/ce/components/issues/issue-layouts/additional-properties.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import type { IIssueDisplayProperties, TIssue } from "@plane/types"; @@ -13,6 +12,6 @@ export type TWorkItemLayoutAdditionalProperties = { issue: TIssue; }; -export function WorkItemLayoutAdditionalProperties(props: TWorkItemLayoutAdditionalProperties) { +export function WorkItemLayoutAdditionalProperties(_props: TWorkItemLayoutAdditionalProperties) { return <>; } diff --git a/apps/web/ce/components/issues/issue-layouts/issue-stats.tsx b/apps/web/ce/components/issues/issue-layouts/issue-stats.tsx index 4ff1eed5552..fc6fbc0a024 100644 --- a/apps/web/ce/components/issues/issue-layouts/issue-stats.tsx +++ b/apps/web/ce/components/issues/issue-layouts/issue-stats.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; type Props = { @@ -15,6 +14,6 @@ type Props = { showLabel?: boolean; }; -export function IssueStats(props: Props) { +export function IssueStats(_props: Props) { return <>; } diff --git a/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx b/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx index 4c09712dc4f..b8b142f7408 100644 --- a/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx +++ b/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type TDuplicateWorkItemModalProps = { workItemId: string; onClose: () => void; diff --git a/apps/web/ce/components/issues/issue-modal/modal-additional-properties.tsx b/apps/web/ce/components/issues/issue-modal/modal-additional-properties.tsx index 4daec9f8b6c..0255407ae68 100644 --- a/apps/web/ce/components/issues/issue-modal/modal-additional-properties.tsx +++ b/apps/web/ce/components/issues/issue-modal/modal-additional-properties.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type React from "react"; - export type TWorkItemModalAdditionalPropertiesProps = { isDraft?: boolean; projectId: string | null; diff --git a/apps/web/ce/components/issues/worklog/activity/filter-root.tsx b/apps/web/ce/components/issues/worklog/activity/filter-root.tsx index 2c40285fe00..623980ffe00 100644 --- a/apps/web/ce/components/issues/worklog/activity/filter-root.tsx +++ b/apps/web/ce/components/issues/worklog/activity/filter-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane imports import type { TActivityFilters, TActivityFilterOption } from "@plane/constants"; import { ACTIVITY_FILTER_TYPE_OPTIONS } from "@plane/constants"; diff --git a/apps/web/ce/components/issues/worklog/activity/root.tsx b/apps/web/ce/components/issues/worklog/activity/root.tsx index d885232588d..3b3d33729b2 100644 --- a/apps/web/ce/components/issues/worklog/activity/root.tsx +++ b/apps/web/ce/components/issues/worklog/activity/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import type { TIssueActivityComment } from "@plane/types"; type TIssueActivityWorklog = { diff --git a/apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx b/apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx index f9e13ccdf10..5ded8d02bb2 100644 --- a/apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx +++ b/apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type TIssueActivityWorklogCreateButton = { workspaceSlug: string; projectId: string; diff --git a/apps/web/ce/components/issues/worklog/property/root.tsx b/apps/web/ce/components/issues/worklog/property/root.tsx index 151be1460ed..7eff7d6a8a0 100644 --- a/apps/web/ce/components/issues/worklog/property/root.tsx +++ b/apps/web/ce/components/issues/worklog/property/root.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type TIssueWorklogProperty = { workspaceSlug: string; projectId: string; diff --git a/apps/web/ce/components/onboarding/tour/root.tsx b/apps/web/ce/components/onboarding/tour/root.tsx index 46100a8c74b..6f879e3922e 100644 --- a/apps/web/ce/components/onboarding/tour/root.tsx +++ b/apps/web/ce/components/onboarding/tour/root.tsx @@ -7,7 +7,6 @@ import { useState } from "react"; import { observer } from "mobx-react"; // plane imports -import { PRODUCT_TOUR_TRACKER_ELEMENTS } from "@plane/constants"; import { Button } from "@plane/propel/button"; import { CloseIcon, PlaneLockup } from "@plane/propel/icons"; // assets diff --git a/apps/web/ce/components/pages/modals/modals.tsx b/apps/web/ce/components/pages/modals/modals.tsx index 0b36ce33f2e..84952fbf400 100644 --- a/apps/web/ce/components/pages/modals/modals.tsx +++ b/apps/web/ce/components/pages/modals/modals.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type React from "react"; import { observer } from "mobx-react"; // components import type { EPageStoreType } from "@/plane-web/hooks/store"; @@ -16,6 +15,6 @@ export type TPageModalsProps = { storeType: EPageStoreType; }; -export const PageModals = observer(function PageModals(props: TPageModalsProps) { +export const PageModals = observer(function PageModals(_props: TPageModalsProps) { return null; }); diff --git a/apps/web/ce/components/sidebar/project-navigation-root.tsx b/apps/web/ce/components/sidebar/project-navigation-root.tsx index 51463851e30..fd5249c01fc 100644 --- a/apps/web/ce/components/sidebar/project-navigation-root.tsx +++ b/apps/web/ce/components/sidebar/project-navigation-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // components import { ProjectNavigation } from "@/components/workspace/sidebar/project-navigation"; diff --git a/apps/web/ce/components/views/helper.tsx b/apps/web/ce/components/views/helper.tsx index e725632ec00..dda72e6ed04 100644 --- a/apps/web/ce/components/views/helper.tsx +++ b/apps/web/ce/components/views/helper.tsx @@ -13,11 +13,11 @@ export type TLayoutSelectionProps = { workspaceSlug: string; }; -export function GlobalViewLayoutSelection(props: TLayoutSelectionProps) { +export function GlobalViewLayoutSelection(_props: TLayoutSelectionProps) { return <>; } -export function WorkspaceAdditionalLayouts(props: TWorkspaceLayoutProps) { +export function WorkspaceAdditionalLayouts(_props: TWorkspaceLayoutProps) { return <>; } diff --git a/apps/web/ce/components/workspace-notifications/notification-card/root.tsx b/apps/web/ce/components/workspace-notifications/notification-card/root.tsx index d6e9afafb2d..2dcc706bf85 100644 --- a/apps/web/ce/components/workspace-notifications/notification-card/root.tsx +++ b/apps/web/ce/components/workspace-notifications/notification-card/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { ENotificationLoader, ENotificationQueryParamType } from "@plane/constants"; diff --git a/apps/web/ce/components/workspace/sidebar/sidebar-item.tsx b/apps/web/ce/components/workspace/sidebar/sidebar-item.tsx index a1fb30bfc4e..c6fbc8f9fec 100644 --- a/apps/web/ce/components/workspace/sidebar/sidebar-item.tsx +++ b/apps/web/ce/components/workspace/sidebar/sidebar-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import type { IWorkspaceSidebarNavigationItem } from "@plane/constants"; import { SidebarItemBase } from "@/components/workspace/sidebar/sidebar-item"; diff --git a/apps/web/ce/components/workspace/upgrade-badge.tsx b/apps/web/ce/components/workspace/upgrade-badge.tsx index 039ac280af2..5bddd913d92 100644 --- a/apps/web/ce/components/workspace/upgrade-badge.tsx +++ b/apps/web/ce/components/workspace/upgrade-badge.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // helpers import { useTranslation } from "@plane/i18n"; import { cn } from "@plane/utils"; diff --git a/apps/web/ce/hooks/use-debounced-duplicate-issues.tsx b/apps/web/ce/hooks/use-debounced-duplicate-issues.tsx index f84f4d2be79..32459909792 100644 --- a/apps/web/ce/hooks/use-debounced-duplicate-issues.tsx +++ b/apps/web/ce/hooks/use-debounced-duplicate-issues.tsx @@ -7,10 +7,10 @@ import type { TDeDupeIssue } from "@plane/types"; export const useDebouncedDuplicateIssues = ( - workspaceSlug: string | undefined, - workspaceId: string | undefined, - projectId: string | undefined, - formData: { name: string | undefined; description_html?: string | undefined; issueId?: string | undefined } + _workspaceSlug: string | undefined, + _workspaceId: string | undefined, + _projectId: string | undefined, + _formData: { name: string | undefined; description_html?: string | undefined; issueId?: string | undefined } ) => { const duplicateIssues: TDeDupeIssue[] = []; diff --git a/apps/web/ce/hooks/use-issue-properties.tsx b/apps/web/ce/hooks/use-issue-properties.tsx index 4eff976d404..310fd725e4c 100644 --- a/apps/web/ce/hooks/use-issue-properties.tsx +++ b/apps/web/ce/hooks/use-issue-properties.tsx @@ -10,7 +10,7 @@ export const useWorkItemProperties = ( projectId: string | null | undefined, workspaceSlug: string | null | undefined, workItemId: string | null | undefined, - issueServiceType: TIssueServiceType + _issueServiceType: TIssueServiceType ) => { if (!projectId || !workspaceSlug || !workItemId) return; }; diff --git a/apps/web/ce/store/issue/helpers/base-issue-store.ts b/apps/web/ce/store/issue/helpers/base-issue-store.ts index 59d6d7b6a0a..236235a8256 100644 --- a/apps/web/ce/store/issue/helpers/base-issue-store.ts +++ b/apps/web/ce/store/issue/helpers/base-issue-store.ts @@ -7,4 +7,4 @@ import type { TIssue } from "@plane/types"; import { getIssueIds } from "@/store/issue/helpers/base-issues-utils"; -export const workItemSortWithOrderByExtended = (array: TIssue[], key?: string) => getIssueIds(array); +export const workItemSortWithOrderByExtended = (array: TIssue[], _key?: string) => getIssueIds(array); diff --git a/apps/web/ce/store/issue/helpers/base-issue.store.ts b/apps/web/ce/store/issue/helpers/base-issue.store.ts index 59d6d7b6a0a..236235a8256 100644 --- a/apps/web/ce/store/issue/helpers/base-issue.store.ts +++ b/apps/web/ce/store/issue/helpers/base-issue.store.ts @@ -7,4 +7,4 @@ import type { TIssue } from "@plane/types"; import { getIssueIds } from "@/store/issue/helpers/base-issues-utils"; -export const workItemSortWithOrderByExtended = (array: TIssue[], key?: string) => getIssueIds(array); +export const workItemSortWithOrderByExtended = (array: TIssue[], _key?: string) => getIssueIds(array); diff --git a/apps/web/ce/store/timeline/base-timeline.store.ts b/apps/web/ce/store/timeline/base-timeline.store.ts index b1c70f99407..b97b2ff7e14 100644 --- a/apps/web/ce/store/timeline/base-timeline.store.ts +++ b/apps/web/ce/store/timeline/base-timeline.store.ts @@ -342,5 +342,5 @@ export class BaseTimeLineStore implements IBaseTimelineStore { }); // Dummy method to return if the current Block's dependency is being dragged - getIsCurrentDependencyDragging = computedFn((blockId: string) => false); + getIsCurrentDependencyDragging = computedFn((_blockId: string) => false); } diff --git a/apps/web/core/components/account/auth-forms/email.tsx b/apps/web/core/components/account/auth-forms/email.tsx index 8abddb42efa..2138753aaf6 100644 --- a/apps/web/core/components/account/auth-forms/email.tsx +++ b/apps/web/core/components/account/auth-forms/email.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import type { FC, FormEvent } from "react"; +import type { FormEvent } from "react"; import { useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; // icons diff --git a/apps/web/core/components/account/auth-forms/password.tsx b/apps/web/core/components/account/auth-forms/password.tsx index 6fed9e88893..8ebe3c827d3 100644 --- a/apps/web/core/components/account/auth-forms/password.tsx +++ b/apps/web/core/components/account/auth-forms/password.tsx @@ -10,7 +10,7 @@ import Link from "next/link"; // icons import { Eye, EyeOff, Info, XCircle } from "lucide-react"; // plane imports -import { API_BASE_URL, E_PASSWORD_STRENGTH, AUTH_TRACKER_EVENTS, AUTH_TRACKER_ELEMENTS } from "@plane/constants"; +import { API_BASE_URL, E_PASSWORD_STRENGTH, AUTH_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { CloseIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/account/auth-forms/unique-code.tsx b/apps/web/core/components/account/auth-forms/unique-code.tsx index aa65175b49d..9c4b8a6c189 100644 --- a/apps/web/core/components/account/auth-forms/unique-code.tsx +++ b/apps/web/core/components/account/auth-forms/unique-code.tsx @@ -41,7 +41,7 @@ const defaultValues: TUniqueCodeFormValues = { }; export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) { - const { mode, email, handleEmailClear, generateEmailUniqueCode, isExistingEmail, nextPath } = props; + const { mode, email, handleEmailClear, generateEmailUniqueCode, nextPath } = props; // derived values const defaultResetTimerValue = 5; // states diff --git a/apps/web/core/components/analytics/analytics-section-wrapper.tsx b/apps/web/core/components/analytics/analytics-section-wrapper.tsx index 9a3af1171b8..d46ce74b46b 100644 --- a/apps/web/core/components/analytics/analytics-section-wrapper.tsx +++ b/apps/web/core/components/analytics/analytics-section-wrapper.tsx @@ -16,7 +16,7 @@ type Props = { }; function AnalyticsSectionWrapper(props: Props) { - const { title, children, className, subtitle, actions, headerClassName } = props; + const { title, children, className, actions, headerClassName } = props; return (
diff --git a/apps/web/core/components/analytics/insight-table/data-table.tsx b/apps/web/core/components/analytics/insight-table/data-table.tsx index 9c24d1aa572..a0f5213a693 100644 --- a/apps/web/core/components/analytics/insight-table/data-table.tsx +++ b/apps/web/core/components/analytics/insight-table/data-table.tsx @@ -38,10 +38,10 @@ interface DataTableProps { } export function DataTable({ columns, data, searchPlaceholder, actions }: DataTableProps) { - const [rowSelection, setRowSelection] = React.useState({}); + const [rowSelection, _setRowSelection] = React.useState({}); const [columnVisibility, setColumnVisibility] = React.useState({}); const [columnFilters, setColumnFilters] = React.useState([]); - const [sorting, setSorting] = React.useState([]); + const [sorting, _setSorting] = React.useState([]); const { t } = useTranslation(); const inputRef = React.useRef(null); const [isSearchOpen, setIsSearchOpen] = React.useState(false); diff --git a/apps/web/core/components/analytics/overview/active-project-item.tsx b/apps/web/core/components/analytics/overview/active-project-item.tsx index e71ae52d530..0af7dc87fda 100644 --- a/apps/web/core/components/analytics/overview/active-project-item.tsx +++ b/apps/web/core/components/analytics/overview/active-project-item.tsx @@ -23,7 +23,7 @@ type Props = { function CompletionPercentage({ percentage }: { percentage: number }) { const percentageColor = - percentage > 50 ? "bg-success-primary text-success-primary" : "bg-danger-primary text-danger-primary"; + percentage > 50 ? "bg-success-subtle text-success-primary" : "bg-danger-subtle text-danger-primary"; return (
{percentage}% diff --git a/apps/web/core/components/analytics/work-items/priority-chart.tsx b/apps/web/core/components/analytics/work-items/priority-chart.tsx index f5ba27d6105..942285cab20 100644 --- a/apps/web/core/components/analytics/work-items/priority-chart.tsx +++ b/apps/web/core/components/analytics/work-items/priority-chart.tsx @@ -31,6 +31,7 @@ import { ChartLoader } from "../loaders"; import { generateBarColor } from "./utils"; declare module "@tanstack/react-table" { + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface ColumnMeta { export: { key: string; diff --git a/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx b/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx index d63b84da8e1..52f3abd66ca 100644 --- a/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx +++ b/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx @@ -29,6 +29,7 @@ import { InsightTable } from "../insight-table"; const analyticsService = new AnalyticsService(); declare module "@tanstack/react-table" { + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface ColumnMeta { export: { key: string; diff --git a/apps/web/core/components/archives/archive-tabs-list.tsx b/apps/web/core/components/archives/archive-tabs-list.tsx index 96396b9a930..ea21842013e 100644 --- a/apps/web/core/components/archives/archive-tabs-list.tsx +++ b/apps/web/core/components/archives/archive-tabs-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; diff --git a/apps/web/core/components/comments/comment-create.tsx b/apps/web/core/components/comments/comment-create.tsx index f727fc78962..d230a5be93e 100644 --- a/apps/web/core/components/comments/comment-create.tsx +++ b/apps/web/core/components/comments/comment-create.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useRef, useState } from "react"; import { observer } from "mobx-react"; import { useForm, Controller } from "react-hook-form"; diff --git a/apps/web/core/components/comments/comment-reaction.tsx b/apps/web/core/components/comments/comment-reaction.tsx index e9d1c931b09..709de31e81b 100644 --- a/apps/web/core/components/comments/comment-reaction.tsx +++ b/apps/web/core/components/comments/comment-reaction.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo, useState } from "react"; import { observer } from "mobx-react"; // plane imports @@ -12,7 +11,6 @@ import { stringToEmoji } from "@plane/propel/emoji-icon-picker"; import { EmojiReactionGroup, EmojiReactionPicker } from "@plane/propel/emoji-reaction"; import type { EmojiReactionType } from "@plane/propel/emoji-reaction"; import type { TCommentsOperations, TIssueComment } from "@plane/types"; -import { cn } from "@plane/utils"; // helpers // local imports diff --git a/apps/web/core/components/common/activity/activity-item.tsx b/apps/web/core/components/common/activity/activity-item.tsx index c4b3e363aad..0cc6a01f5ff 100644 --- a/apps/web/core/components/common/activity/activity-item.tsx +++ b/apps/web/core/components/common/activity/activity-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import type { TProjectActivity } from "@/plane-web/types"; @@ -18,7 +17,7 @@ type TActivityItem = { }; export const ActivityItem = observer(function ActivityItem(props: TActivityItem) { - const { activity, showProject = true, ends } = props; + const { activity, ends } = props; if (!activity) return null; diff --git a/apps/web/core/components/common/activity/user.tsx b/apps/web/core/components/common/activity/user.tsx index 9254ad3eb8e..1ba3d03b750 100644 --- a/apps/web/core/components/common/activity/user.tsx +++ b/apps/web/core/components/common/activity/user.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; // types diff --git a/apps/web/core/components/common/count-chip.tsx b/apps/web/core/components/common/count-chip.tsx index 113dc4264cd..8b920415195 100644 --- a/apps/web/core/components/common/count-chip.tsx +++ b/apps/web/core/components/common/count-chip.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // import { cn } from "@plane/utils"; diff --git a/apps/web/core/components/common/pro-icon.tsx b/apps/web/core/components/common/pro-icon.tsx index 30e7ea97191..474ddd83676 100644 --- a/apps/web/core/components/common/pro-icon.tsx +++ b/apps/web/core/components/common/pro-icon.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Crown } from "lucide-react"; // helpers import { cn } from "@plane/utils"; diff --git a/apps/web/core/components/core/list/list-root.tsx b/apps/web/core/components/core/list/list-root.tsx index a965478597a..d81f2daeec2 100644 --- a/apps/web/core/components/core/list/list-root.tsx +++ b/apps/web/core/components/core/list/list-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { Row, ERowVariant } from "@plane/ui"; diff --git a/apps/web/core/components/core/theme/theme-switch.tsx b/apps/web/core/components/core/theme/theme-switch.tsx index 3560e997840..b9de9bc5dc5 100644 --- a/apps/web/core/components/core/theme/theme-switch.tsx +++ b/apps/web/core/components/core/theme/theme-switch.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane imports import type { I_THEME_OPTION } from "@plane/constants"; import { THEME_OPTIONS } from "@plane/constants"; diff --git a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx index 678fe682d50..f6ea00ba6c6 100644 --- a/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx +++ b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Fragment, useCallback, useRef, useState } from "react"; import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/cycles/active-cycle/productivity.tsx b/apps/web/core/components/cycles/active-cycle/productivity.tsx index 21720abc5c3..c3ebdfcbe8f 100644 --- a/apps/web/core/components/cycles/active-cycle/productivity.tsx +++ b/apps/web/core/components/cycles/active-cycle/productivity.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Fragment } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; diff --git a/apps/web/core/components/cycles/active-cycle/progress.tsx b/apps/web/core/components/cycles/active-cycle/progress.tsx index d781920b6c3..4688e9dc5bc 100644 --- a/apps/web/core/components/cycles/active-cycle/progress.tsx +++ b/apps/web/core/components/cycles/active-cycle/progress.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTheme } from "next-themes"; // plane imports diff --git a/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx index 4e4e579b875..738856d20ea 100644 --- a/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo } from "react"; import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx index 65137162603..9c8ba8ac2ab 100644 --- a/apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx index e2a825ccc24..05cdb8ebbb5 100644 --- a/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx +++ b/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx @@ -76,7 +76,7 @@ export const CycleSidebarHeader = observer(function CycleSidebarHeader(props: Pr try { const res = await cycleService.cycleDateCheck(workspaceSlug, projectId, payload); return res.status; - } catch (err) { + } catch (_err) { return false; } }; diff --git a/apps/web/core/components/cycles/archived-cycles/view.tsx b/apps/web/core/components/cycles/archived-cycles/view.tsx index 48a1f6a097a..2153fb0c969 100644 --- a/apps/web/core/components/cycles/archived-cycles/view.tsx +++ b/apps/web/core/components/cycles/archived-cycles/view.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // assets import AllFiltersImage from "@/app/assets/empty-state/cycle/all-filters.svg?url"; diff --git a/apps/web/core/components/cycles/cycles-view.tsx b/apps/web/core/components/cycles/cycles-view.tsx index 223c3a959f4..d0762125fee 100644 --- a/apps/web/core/components/cycles/cycles-view.tsx +++ b/apps/web/core/components/cycles/cycles-view.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // components import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/cycles/list/cycle-list-group-header.tsx b/apps/web/core/components/cycles/list/cycle-list-group-header.tsx index 903e1086be9..9b3578639af 100644 --- a/apps/web/core/components/cycles/list/cycle-list-group-header.tsx +++ b/apps/web/core/components/cycles/list/cycle-list-group-header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // types import { CycleGroupIcon, ChevronDownIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx b/apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx index 9e6f5c134fa..3d836dac0b4 100644 --- a/apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx +++ b/apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { Logo } from "@plane/propel/emoji-icon-picker"; diff --git a/apps/web/core/components/cycles/list/root.tsx b/apps/web/core/components/cycles/list/root.tsx index 0b2a4ed044f..07351decfbb 100644 --- a/apps/web/core/components/cycles/list/root.tsx +++ b/apps/web/core/components/cycles/list/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { Disclosure } from "@headlessui/react"; diff --git a/apps/web/core/components/cycles/modal.tsx b/apps/web/core/components/cycles/modal.tsx index 2128bc3461e..582489ced59 100644 --- a/apps/web/core/components/cycles/modal.tsx +++ b/apps/web/core/components/cycles/modal.tsx @@ -50,7 +50,7 @@ export function CycleCreateUpdateModal(props: CycleModalProps) { const selectedProjectId = payload.project_id ?? projectId.toString(); await createCycle(workspaceSlug, selectedProjectId, payload) - .then((res) => { + .then((_res) => { // mutate when the current cycle creation is active if (payload.start_date && payload.end_date) { const currentDate = new Date(); @@ -81,7 +81,7 @@ export function CycleCreateUpdateModal(props: CycleModalProps) { const selectedProjectId = payload.project_id ?? projectId.toString(); await updateCycleDetails(workspaceSlug, selectedProjectId, cycleId, payload) - .then((res) => { + .then((_res) => { setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", diff --git a/apps/web/core/components/empty-state/section-empty-state-root.tsx b/apps/web/core/components/empty-state/section-empty-state-root.tsx index cc4acdffb48..3d0a05aa3d2 100644 --- a/apps/web/core/components/empty-state/section-empty-state-root.tsx +++ b/apps/web/core/components/empty-state/section-empty-state-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { cn } from "@plane/utils"; type Props = { diff --git a/apps/web/core/components/estimates/create/modal.tsx b/apps/web/core/components/estimates/create/modal.tsx index 02bbaced9a2..518f6665095 100644 --- a/apps/web/core/components/estimates/create/modal.tsx +++ b/apps/web/core/components/estimates/create/modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useEffect, useMemo, useState } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/estimates/delete/modal.tsx b/apps/web/core/components/estimates/delete/modal.tsx index 8181fc88814..e6b39fcdec2 100644 --- a/apps/web/core/components/estimates/delete/modal.tsx +++ b/apps/web/core/components/estimates/delete/modal.tsx @@ -48,7 +48,7 @@ export const DeleteEstimateModal = observer(function DeleteEstimateModal(props: message: "Estimate has been removed from your project.", }); handleClose(); - } catch (error) { + } catch (_error) { setButtonLoader(false); setToast({ type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/estimates/estimate-disable-switch.tsx b/apps/web/core/components/estimates/estimate-disable-switch.tsx index 7553ce0757d..13bf7ce663a 100644 --- a/apps/web/core/components/estimates/estimate-disable-switch.tsx +++ b/apps/web/core/components/estimates/estimate-disable-switch.tsx @@ -44,7 +44,7 @@ export const EstimateDisableSwitch = observer(function EstimateDisableSwitch(pro ? t("project_settings.estimates.toasts.disabled.success.message") : t("project_settings.estimates.toasts.enabled.success.message"), }); - } catch (err) { + } catch (_err) { setToast({ type: TOAST_TYPE.ERROR, title: t("project_settings.estimates.toasts.disabled.error.title"), diff --git a/apps/web/core/components/estimates/estimate-list.tsx b/apps/web/core/components/estimates/estimate-list.tsx index 0a428e8f711..6e919c55715 100644 --- a/apps/web/core/components/estimates/estimate-list.tsx +++ b/apps/web/core/components/estimates/estimate-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // local imports import { EstimateListItem } from "./estimate-list-item"; diff --git a/apps/web/core/components/estimates/estimate-search.tsx b/apps/web/core/components/estimates/estimate-search.tsx index 38a6439f18d..0b05f6716c2 100644 --- a/apps/web/core/components/estimates/estimate-search.tsx +++ b/apps/web/core/components/estimates/estimate-search.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; export const EstimateSearch = observer(function EstimateSearch() { diff --git a/apps/web/core/components/estimates/inputs/number-input.tsx b/apps/web/core/components/estimates/inputs/number-input.tsx index a93626df1cb..3e4d30b73d6 100644 --- a/apps/web/core/components/estimates/inputs/number-input.tsx +++ b/apps/web/core/components/estimates/inputs/number-input.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useTranslation } from "@plane/i18n"; type TEstimateNumberInputProps = { value?: number; diff --git a/apps/web/core/components/estimates/inputs/root.tsx b/apps/web/core/components/estimates/inputs/root.tsx index 1c38f41cfeb..86b743ff7b2 100644 --- a/apps/web/core/components/estimates/inputs/root.tsx +++ b/apps/web/core/components/estimates/inputs/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane imports import type { TEstimateSystemKeys } from "@plane/types"; import { EEstimateSystem } from "@plane/types"; diff --git a/apps/web/core/components/estimates/inputs/text-input.tsx b/apps/web/core/components/estimates/inputs/text-input.tsx index 03dd0b50d4a..50fe55da86e 100644 --- a/apps/web/core/components/estimates/inputs/text-input.tsx +++ b/apps/web/core/components/estimates/inputs/text-input.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useTranslation } from "@plane/i18n"; type TEstimateTextInputProps = { value?: string; diff --git a/apps/web/core/components/estimates/loader-screen.tsx b/apps/web/core/components/estimates/loader-screen.tsx index 79f3b03947b..d858df1d971 100644 --- a/apps/web/core/components/estimates/loader-screen.tsx +++ b/apps/web/core/components/estimates/loader-screen.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Loader } from "@plane/ui"; export function EstimateLoaderScreen() { diff --git a/apps/web/core/components/estimates/points/create-root.tsx b/apps/web/core/components/estimates/points/create-root.tsx index b309b2890c7..ad3c57e9fd7 100644 --- a/apps/web/core/components/estimates/points/create-root.tsx +++ b/apps/web/core/components/estimates/points/create-root.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import type { Dispatch, FC, SetStateAction } from "react"; +import type { Dispatch, SetStateAction } from "react"; import { useCallback, useState } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/estimates/points/create.tsx b/apps/web/core/components/estimates/points/create.tsx index a4fd55ad183..50aced9cd56 100644 --- a/apps/web/core/components/estimates/points/create.tsx +++ b/apps/web/core/components/estimates/points/create.tsx @@ -166,12 +166,6 @@ export const EstimatePointCreate = observer(function EstimatePointCreate(props: handleEstimatePointError(estimateInputValue, t("project_settings.estimates.validation.empty")); }; - // derived values - const inputProps = { - type: "text", - maxlength: MAX_ESTIMATE_POINT_INPUT_LENGTH, - }; - return (
{ - if (!isEnabled || !user || !intercomAppId) return; - - Intercom({ - app_id: intercomAppId, - user_id: user.id, - name: `${user.first_name} ${user.last_name}`, - email: user.email, - hide_default_launcher: true, - }); - - const handleOpenChatSupport = () => { - show(); - }; - - window.addEventListener(CHAT_SUPPORT_EVENTS.open, handleOpenChatSupport); - return () => { - window.removeEventListener(CHAT_SUPPORT_EVENTS.open, handleOpenChatSupport); - shutdown(); - }; - }, [user, intercomAppId, isEnabled]); - - return null; -}); - -export default ChatSupportModal; diff --git a/apps/web/core/components/home/user-greetings.tsx b/apps/web/core/components/home/user-greetings.tsx index 9fdb5598be5..8d5d6cc1e86 100644 --- a/apps/web/core/components/home/user-greetings.tsx +++ b/apps/web/core/components/home/user-greetings.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; // plane types import { useTranslation } from "@plane/i18n"; import type { IUser } from "@plane/types"; diff --git a/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx b/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx index a832c1a0ddb..76361332e16 100644 --- a/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx +++ b/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useEffect } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; diff --git a/apps/web/core/components/home/widgets/links/links.tsx b/apps/web/core/components/home/widgets/links/links.tsx index 595c783b35f..4d6d17121da 100644 --- a/apps/web/core/components/home/widgets/links/links.tsx +++ b/apps/web/core/components/home/widgets/links/links.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // computed import { ContentOverflowWrapper } from "@/components/core/content-overflow-HOC"; diff --git a/apps/web/core/components/home/widgets/manage/index.tsx b/apps/web/core/components/home/widgets/manage/index.tsx index 673efc8298e..9df07e8e680 100644 --- a/apps/web/core/components/home/widgets/manage/index.tsx +++ b/apps/web/core/components/home/widgets/manage/index.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane types // plane ui diff --git a/apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx b/apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx index 6ff108183c1..fd02106f5d8 100644 --- a/apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx +++ b/apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // ui diff --git a/apps/web/core/components/home/widgets/manage/widget-item.tsx b/apps/web/core/components/home/widgets/manage/widget-item.tsx index 97b5380fffc..f254e8b98aa 100644 --- a/apps/web/core/components/home/widgets/manage/widget-item.tsx +++ b/apps/web/core/components/home/widgets/manage/widget-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useEffect, useRef, useState } from "react"; import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine"; import type { @@ -21,7 +20,7 @@ import { useParams } from "next/navigation"; import { createRoot } from "react-dom/client"; // plane types import { useTranslation } from "@plane/i18n"; -import type { InstructionType, TWidgetEntityData } from "@plane/types"; +import type { InstructionType } from "@plane/types"; // plane ui import { DropIndicator, ToggleSwitch } from "@plane/ui"; // plane utils diff --git a/apps/web/core/components/home/widgets/recents/filters.tsx b/apps/web/core/components/home/widgets/recents/filters.tsx index f8219992ebc..8a710601a92 100644 --- a/apps/web/core/components/home/widgets/recents/filters.tsx +++ b/apps/web/core/components/home/widgets/recents/filters.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { ChevronDownIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/inbox/content/inbox-issue-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-header.tsx index 739b201a083..5243521731e 100644 --- a/apps/web/core/components/inbox/content/inbox-issue-header.tsx +++ b/apps/web/core/components/inbox/content/inbox-issue-header.tsx @@ -4,15 +4,24 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useCallback, useEffect, useState } from "react"; import { observer } from "mobx-react"; -import { CircleCheck, CircleX, Clock, FileStack, MoveRight } from "lucide-react"; +import { Clock, FileStack, MoreHorizontal, MoveRight } from "lucide-react"; // plane imports import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; -import { LinkIcon, CopyIcon, NewTabIcon, TrashIcon, ChevronDownIcon, ChevronUpIcon } from "@plane/propel/icons"; +import { IconButton, getIconButtonStyling } from "@plane/propel/icon-button"; +import { + LinkIcon, + CopyIcon, + NewTabIcon, + TrashIcon, + ChevronDownIcon, + ChevronUpIcon, + CheckCircleFilledIcon, + CloseCircleFilledIcon, +} from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import type { TNameDescriptionLoader } from "@plane/types"; import { EInboxIssueStatus } from "@plane/types"; @@ -68,7 +77,8 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader const { currentTab, deleteInboxIssue, filteredInboxIssueIds } = useProjectInbox(); const { data: currentUser } = useUser(); const { allowPermissions } = useUserPermissions(); - const { currentProjectDetails } = useProject(); + const { getPartialProjectById } = useProject(); + const currentProjectDetails = getPartialProjectById(projectId); const { t } = useTranslation(); const router = useAppRouter(); @@ -297,73 +307,70 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader
{!isNotificationEmbed && (
- - + />
)}
{canMarkAsAccepted && ( -
- -
+ )} {canMarkAsDeclined && ( -
- -
+ )} {isAcceptedOrDeclined ? (
router.push(workItemLink)} target="_self"> - @@ -371,7 +378,11 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader ) : ( <> {isAllowed && ( - + } + customButtonClassName={getIconButtonStyling("secondary", "lg")} + placement="bottom-start" + > {canMarkAsAccepted && ( diff --git a/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx index 0d9f98e9c9d..bde81665d54 100644 --- a/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx +++ b/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx @@ -4,11 +4,20 @@ * See the LICENSE file for details. */ -import React from "react"; import { observer } from "mobx-react"; -import { CircleCheck, CircleX, Clock, FileStack, PanelLeft, MoveRight } from "lucide-react"; -import { LinkIcon, NewTabIcon, TrashIcon, ChevronDownIcon, ChevronUpIcon } from "@plane/propel/icons"; +import { Clock, FileStack, MoreHorizontal, PanelLeft, MoveRight } from "lucide-react"; +import { IconButton, getIconButtonStyling } from "@plane/propel/icon-button"; +import { + LinkIcon, + NewTabIcon, + TrashIcon, + ChevronDownIcon, + ChevronUpIcon, + CheckCircleFilledIcon, + CloseCircleFilledIcon, +} from "@plane/propel/icons"; import type { TNameDescriptionLoader } from "@plane/types"; + import { Header, CustomMenu, EHeaderVariant } from "@plane/ui"; import { cn, findHowManyDaysLeft, generateWorkItemLink } from "@plane/utils"; // components @@ -18,6 +27,7 @@ import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; // store types import type { IInboxIssueStore } from "@/store/inbox/inbox-issue.store"; + // local imports import { InboxIssueStatus } from "../inbox-issue-status"; @@ -102,20 +112,20 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions />
- - + />
@@ -124,7 +134,11 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions
- + } + customButtonClassName={getIconButtonStyling("secondary", "lg")} + placement="bottom-start" + > {isAcceptedOrDeclined && (
@@ -183,8 +197,8 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions ) } > -
- +
+ Accept
@@ -199,8 +213,8 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions ) } > -
- +
+ Decline
@@ -208,7 +222,7 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions {canDelete && !isAcceptedOrDeclined && ( setDeleteIssueModal(true)}>
- + Delete
diff --git a/apps/web/core/components/inbox/content/issue-root.tsx b/apps/web/core/components/inbox/content/issue-root.tsx index 9538779a528..172693b9229 100644 --- a/apps/web/core/components/inbox/content/issue-root.tsx +++ b/apps/web/core/components/inbox/content/issue-root.tsx @@ -117,7 +117,7 @@ export const InboxIssueMainContent = observer(function InboxIssueMainContent(pro update: async (_workspaceSlug: string, _projectId: string, _issueId: string, data: Partial) => { try { await inboxIssue.updateIssue(data); - } catch (error) { + } catch (_error) { setToast({ title: "Work item update failed", type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx index 5e13689475f..53cf70989bd 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { PAST_DURATION_FILTER_OPTIONS } from "@plane/constants"; import { CloseIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx index 32b6f0f20e0..1fd33cbe80c 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // hooks import { CloseIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx index 724260b2426..4148f4af3f0 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane types diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx index a588b37df6c..38a12602a0d 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { ISSUE_PRIORITIES } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx index 29b158d1065..99283e6c2c9 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { Header, EHeaderVariant } from "@plane/ui"; diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx index 4de55f4ecff..f8b94c9bcf0 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { EIconSize } from "@plane/constants"; import { StateGroupIcon, CloseIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx index 01543e59ab3..ccc7c31ae7a 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { INBOX_STATUS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx index 84ae0ffdef0..51fbbe6d495 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { concat, uniq } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx index 2e4e57ff1a7..99ae144cd0c 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx @@ -4,21 +4,18 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { SearchIcon, CloseIcon } from "@plane/propel/icons"; // hooks import { useLabel } from "@/hooks/store/use-label"; import { useMember } from "@/hooks/store/use-member"; -import { useProjectState } from "@/hooks/store/use-project-state"; import { usePlatformOS } from "@/hooks/use-platform-os"; // local imports import { FilterDate } from "./date"; import { FilterLabels } from "./labels"; import { FilterMember } from "./members"; import { FilterPriority } from "./priority"; -import { FilterState } from "./state"; import { FilterStatus } from "./status"; export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelection() { @@ -28,7 +25,6 @@ export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelec project: { projectMemberIds }, } = useMember(); const { projectLabels } = useLabel(); - const { projectStates } = useProjectState(); // states const [filtersSearchQuery, setFiltersSearchQuery] = useState(""); diff --git a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx index e45dae656b6..23e338b1d31 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import type { IIssueLabel } from "@plane/types"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx index c6ff9a57198..d555aa81b85 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo, useState } from "react"; import { sortBy } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/priority.tsx b/apps/web/core/components/inbox/inbox-filter/filters/priority.tsx index a88d10a3ca1..5272e368b24 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/priority.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/priority.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { ISSUE_PRIORITIES } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx index 08d125f645e..4a4af021fce 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { EIconSize } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/filters/status.tsx index 3f1955f4abe..e08a71334ac 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/status.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/status.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; // types diff --git a/apps/web/core/components/inbox/inbox-filter/root.tsx b/apps/web/core/components/inbox/inbox-filter/root.tsx index 848e2f4d290..2413ccc382f 100644 --- a/apps/web/core/components/inbox/inbox-filter/root.tsx +++ b/apps/web/core/components/inbox/inbox-filter/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { ListFilter } from "lucide-react"; import { getButtonStyling } from "@plane/propel/button"; // plane imports diff --git a/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx b/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx index 599a1ce9cc9..ad2e720c715 100644 --- a/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx +++ b/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react"; import { INBOX_ISSUE_ORDER_BY_OPTIONS, INBOX_ISSUE_SORT_BY_OPTIONS } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/inbox-status-icon.tsx b/apps/web/core/components/inbox/inbox-status-icon.tsx index 86bcf791288..ceaf5826d25 100644 --- a/apps/web/core/components/inbox/inbox-status-icon.tsx +++ b/apps/web/core/components/inbox/inbox-status-icon.tsx @@ -13,28 +13,28 @@ import { cn } from "@plane/utils"; export const ICON_PROPERTIES = { [EInboxIssueStatus.PENDING]: { icon: AlertTriangle, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#AB6400]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#FFF7C2]"), + textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-warning-primary"), + bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-warning-subtle"), }, [EInboxIssueStatus.DECLINED]: { icon: XCircle, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#CE2C31]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#FEEBEC]"), + textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-danger-primary"), + bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-danger-subtle"), }, [EInboxIssueStatus.SNOOZED]: { icon: Clock, textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "text-danger-primary" : "text-placeholder"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "bg-danger-subtle" : "bg-[#E0E1E6]"), + bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "bg-danger-subtle" : "bg-layer-3"), }, [EInboxIssueStatus.ACCEPTED]: { icon: CheckCircle2, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#3E9B4F]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#E9F6E9]"), + textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-success-primary"), + bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-success-subtle"), }, [EInboxIssueStatus.DUPLICATE]: { icon: CopyIcon, textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-secondary"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-gray-500/10"), + bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-layer-3"), }, }; export function InboxStatusIcon({ diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx index f67f9b25d4d..ce3961b0892 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import type { FC, RefObject } from "react"; +import type { RefObject } from "react"; import { observer } from "mobx-react"; // plane imports import { ETabIndices } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx index b64a64b0f16..6d6c80e937c 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { ETabIndices } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-title.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-title.tsx index 3c8c809ec94..49d8178fb53 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-title.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-title.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { ETabIndices } from "@plane/constants"; diff --git a/apps/web/core/components/inbox/modals/create-modal/modal.tsx b/apps/web/core/components/inbox/modals/create-modal/modal.tsx index 43f01251d86..85b8a14c0ea 100644 --- a/apps/web/core/components/inbox/modals/create-modal/modal.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; // plane imports import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui"; diff --git a/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx b/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx index 708458efbbd..1ad83a6b0e5 100644 --- a/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx +++ b/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx @@ -26,7 +26,13 @@ export function InboxIssueSnoozeModal(props: InboxIssueSnoozeModalProps) { const { t } = useTranslation(); return ( - +
-
-
-
- - - + +
+ {/* Background decorations */} + + + {/* Main content */} +
+
+
-
- -
- Plane background pattern -
- -
-
-
-
-

Welcome aboard Plane!

- Plane Logo -

- Get started by setting up your instance and workspace +

+
+ Plane Logo +
+

Welcome to Plane

+

+ Set up your instance and create your first workspace to begin managing projects and work.

-
+ + +
-
+ ); } diff --git a/apps/web/core/components/issues/archived-issues-header.tsx b/apps/web/core/components/issues/archived-issues-header.tsx index 2f0077911e1..8190b45853d 100644 --- a/apps/web/core/components/issues/archived-issues-header.tsx +++ b/apps/web/core/components/issues/archived-issues-header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports diff --git a/apps/web/core/components/issues/attachment/attachment-detail.tsx b/apps/web/core/components/issues/attachment/attachment-detail.tsx index 1d7db397957..fb486b04b18 100644 --- a/apps/web/core/components/issues/attachment/attachment-detail.tsx +++ b/apps/web/core/components/issues/attachment/attachment-detail.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; diff --git a/apps/web/core/components/issues/attachment/attachment-item-list.tsx b/apps/web/core/components/issues/attachment/attachment-item-list.tsx index 46f619be1c6..0ac4db84f29 100644 --- a/apps/web/core/components/issues/attachment/attachment-item-list.tsx +++ b/apps/web/core/components/issues/attachment/attachment-item-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useCallback, useState } from "react"; import { observer } from "mobx-react"; import type { FileRejection } from "react-dropzone"; diff --git a/apps/web/core/components/issues/attachment/attachment-list-item.tsx b/apps/web/core/components/issues/attachment/attachment-list-item.tsx index 55023fec4d2..6c8135d6264 100644 --- a/apps/web/core/components/issues/attachment/attachment-list-item.tsx +++ b/apps/web/core/components/issues/attachment/attachment-list-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/attachment/attachments-list.tsx b/apps/web/core/components/issues/attachment/attachments-list.tsx index 2811709075c..a5d75e16652 100644 --- a/apps/web/core/components/issues/attachment/attachments-list.tsx +++ b/apps/web/core/components/issues/attachment/attachments-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // hooks import { useIssueDetail } from "@/hooks/store/use-issue-detail"; diff --git a/apps/web/core/components/issues/attachment/delete-attachment-modal.tsx b/apps/web/core/components/issues/attachment/delete-attachment-modal.tsx index 691b3126170..676f4e38290 100644 --- a/apps/web/core/components/issues/attachment/delete-attachment-modal.tsx +++ b/apps/web/core/components/issues/attachment/delete-attachment-modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; // plane-i18n diff --git a/apps/web/core/components/issues/create-issue-toast-action-items.tsx b/apps/web/core/components/issues/create-issue-toast-action-items.tsx index 1d894dbf8ed..2bdcd552a81 100644 --- a/apps/web/core/components/issues/create-issue-toast-action-items.tsx +++ b/apps/web/core/components/issues/create-issue-toast-action-items.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useState } from "react"; import { observer } from "mobx-react"; import { copyUrlToClipboard, generateWorkItemLink } from "@plane/utils"; @@ -24,7 +23,7 @@ type TCreateIssueToastActionItems = { export const CreateIssueToastActionItems = observer(function CreateIssueToastActionItems( props: TCreateIssueToastActionItems ) { - const { workspaceSlug, projectId, issueId, isEpic = false } = props; + const { workspaceSlug, issueId, isEpic = false } = props; // state const [copied, setCopied] = useState(false); // store hooks @@ -53,7 +52,7 @@ export const CreateIssueToastActionItems = observer(function CreateIssueToastAct await copyUrlToClipboard(workItemLink); setCopied(true); setTimeout(() => setCopied(false), 3000); - } catch (error) { + } catch (_error) { setCopied(false); } e.preventDefault(); diff --git a/apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx b/apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx index c82628e3a90..e9b1ac43a9b 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { Paperclip } from "lucide-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx index a536acf5a56..90c738ee784 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import type { TIssueServiceType } from "@plane/types"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx index 4354d380697..7853b3b4e40 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useCallback, useState } from "react"; import { observer } from "mobx-react"; import type { FileRejection } from "react-dropzone"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx index 0c94fca605a..e1a94c7d79e 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx index 74d69f3cfbe..28ce79670b7 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useMemo } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx index 962e933190a..8f741ad1660 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx index fc08f6a7b91..de3d180cee5 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/links/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/content.tsx index 999721885ca..3ffe9950c22 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/links/content.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/links/content.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import type { TIssueServiceType } from "@plane/types"; // components diff --git a/apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx index f10504ef7ad..7ed50892902 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { PlusIcon } from "@plane/propel/icons"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/links/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/root.tsx index b38c6b2b6fd..bd963868a2e 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/links/root.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/links/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/links/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/title.tsx index ceb855a1dab..b9d1fa76360 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/links/title.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/links/title.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useMemo } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx index c7b6377ac74..2e2f5f4a88d 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx index 98700c91818..46375887c71 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx index edebdb19b61..d1b5d80880d 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx index ce4bdab4aa1..658359c22d0 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useMemo } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/root.tsx index 037e345f1fe..2218ec3b7aa 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/root.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // plane imports import type { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx index 96e020113a1..0dbf8c85ab5 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useEffect, useState, useCallback } from "react"; import { observer } from "mobx-react"; import type { TIssue, TIssueServiceType } from "@plane/types"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx index 4d679d69379..cf4260b2eba 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo } from "react"; import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx index ea95af28dc1..9dbaf05d2de 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo, useState } from "react"; import { observer } from "mobx-react"; import { ListFilter } from "lucide-react"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx index 94fa95d4358..b76d7241002 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { CircleDashed } from "lucide-react"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx index 70b2507ea12..250e8ff883b 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx @@ -139,6 +139,7 @@ export const SubIssuesListItemProperties = observer(function SubIssuesListItemPr from: getDate(issue.start_date) || undefined, to: getDate(issue.target_date) || undefined, }} + placement="top-end" onSelect={(range) => { handleStartDate(range?.from ?? null); handleTargetDate(range?.to ?? null); @@ -154,6 +155,7 @@ export const SubIssuesListItemProperties = observer(function SubIssuesListItemPr showTooltip customTooltipHeading="Date Range" renderPlaceholder={false} + renderInPortal />
diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx index 8e825e00c0e..ded8cc8cb96 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx @@ -7,7 +7,6 @@ import React from "react"; import { observer } from "mobx-react"; // plane imports -import { WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { PlusIcon, WorkItemsIcon } from "@plane/propel/icons"; import type { TIssue, TIssueServiceType } from "@plane/types"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx index c0de91cb92b..4bc8c79690c 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx index 997a1ae574d..524ec47951e 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useCallback } from "react"; import { cloneDeep } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx index 1298dbe156b..10beb87889d 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { useTranslation } from "@plane/i18n"; @@ -25,14 +24,7 @@ type Props = { }; export const SubIssuesCollapsibleTitle = observer(function SubIssuesCollapsibleTitle(props: Props) { - const { - isOpen, - parentIssueId, - disabled, - issueServiceType = EIssueServiceType.ISSUES, - projectId, - workspaceSlug, - } = props; + const { isOpen, parentIssueId, disabled, issueServiceType = EIssueServiceType.ISSUES, projectId } = props; // translation const { t } = useTranslation(); // store hooks diff --git a/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx index c848aeea112..df2dd31cf5d 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx +++ b/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // helpers import { Button } from "@plane/propel/button"; diff --git a/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx index 1906cd8d6ca..a88bc7a806a 100644 --- a/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx +++ b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import type { FC, ReactNode } from "react"; +import type { ReactNode } from "react"; import { Network } from "lucide-react"; // plane imports import { Tooltip } from "@plane/propel/tooltip"; diff --git a/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx index a7da1d45d20..d38c497089d 100644 --- a/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx +++ b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { CalendarDays } from "lucide-react"; // hooks diff --git a/apps/web/core/components/issues/issue-detail/label/root.tsx b/apps/web/core/components/issues/issue-detail/label/root.tsx index bc9ecd34a25..b205c56d5c0 100644 --- a/apps/web/core/components/issues/issue-detail/label/root.tsx +++ b/apps/web/core/components/issues/issue-detail/label/root.tsx @@ -62,7 +62,7 @@ export const IssueLabel = observer(function IssueLabel(props: TIssueLabel) { try { if (onLabelUpdate) onLabelUpdate(data.label_ids || []); else await updateIssue(workspaceSlug, projectId, issueId, data); - } catch (error) { + } catch (_error) { setToast({ title: t("toast.error"), type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx b/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx index 4f37b31a80f..ecc11ddcdf4 100644 --- a/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx +++ b/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useEffect } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; diff --git a/apps/web/core/components/issues/issue-detail/main-content.tsx b/apps/web/core/components/issues/issue-detail/main-content.tsx index f482e240cb2..d14bd35396a 100644 --- a/apps/web/core/components/issues/issue-detail/main-content.tsx +++ b/apps/web/core/components/issues/issue-detail/main-content.tsx @@ -134,7 +134,7 @@ export const IssueMainContent = observer(function IssueMainContent(props: Props) } shouldRecordHeights={isMobile} > diff --git a/apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx b/apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx index 958ebb26e29..cc3690900c2 100644 --- a/apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import type { FC, MutableRefObject } from "react"; +import type { MutableRefObject } from "react"; // components import type { TIssue, IIssueDisplayProperties, TIssueMap, TGroupedIssues } from "@plane/types"; // hooks diff --git a/apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx b/apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx index ad861ad2cfa..9fec4fc10a1 100644 --- a/apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx @@ -83,7 +83,7 @@ export const HeaderGroupByCard = observer(function HeaderGroupByCard(props: IHea title: "Success!", message: "Work items added to the cycle successfully.", }); - } catch (error) { + } catch (_error) { setToast({ type: TOAST_TYPE.ERROR, title: "Error!", diff --git a/apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx index 7d134080b0e..54c8913fab3 100644 --- a/apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // local imports import { ArchivedIssueQuickActions } from "../../quick-action-dropdowns"; diff --git a/apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx index eb1c3450e78..cc69e7cdff0 100644 --- a/apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; diff --git a/apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx index 7d4eb226ea9..bde805f3619 100644 --- a/apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx +++ b/apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports diff --git a/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/issue-detail.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/issue-detail.tsx index 82e65dd0278..ab391019682 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/issue-detail.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/issue-detail.tsx @@ -7,7 +7,7 @@ import { useState } from "react"; import { omit } from "lodash-es"; import { observer } from "mobx-react"; -import { useParams, usePathname } from "next/navigation"; +import { useParams } from "next/navigation"; import { Ellipsis } from "lucide-react"; // plane imports import { ARCHIVABLE_STATE_GROUPS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; @@ -60,7 +60,6 @@ export const WorkItemDetailQuickActions = observer(function WorkItemDetailQuickA } = props; // router const { workspaceSlug } = useParams(); - const pathname = usePathname(); // states const [createUpdateIssueModal, setCreateUpdateIssueModal] = useState(false); const [issueToEdit, setIssueToEdit] = useState(undefined); diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx index 2700c788867..0362734af1d 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx index 5a02c87768a..4ecd6a36208 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx index dce450308ff..1a17c44f887 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx index f3f742ff92b..a94ccb068d1 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx index 1079a45fbf6..9fd69a8b9fe 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import type { TQuickAddIssueForm } from "../root"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx index 01c61213fdf..65d05c40311 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { cn } from "@plane/utils"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx index 0338a4f58c3..f6a1aba136b 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import type { TQuickAddIssueForm } from "../root"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx index 7aba3fc4413..7f9ff9b6d25 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import type { TQuickAddIssueForm } from "../root"; diff --git a/apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx index 10a1acc16bb..ebf5978a2c6 100644 --- a/apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx +++ b/apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import type { TQuickAddIssueForm } from "../root"; diff --git a/apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx index 5a2921ba7e8..a7bad0857bb 100644 --- a/apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx +++ b/apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx @@ -14,7 +14,6 @@ import { EmptyStateDetailed } from "@plane/propel/empty-state"; import type { EIssueLayoutTypes } from "@plane/types"; import { EIssuesStoreType, STATIC_VIEW_TYPES } from "@plane/types"; // assets -import emptyView from "@/app/assets/empty-state/view.svg?url"; // components import { IssuePeekOverview } from "@/components/issues/peek-overview"; import { WorkspaceActiveLayout } from "@/components/views/helper"; diff --git a/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx index c511fd31815..6d060c4dbd3 100644 --- a/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx +++ b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx @@ -81,10 +81,13 @@ export const SpreadsheetIssueRow = observer(function SpreadsheetIssueRow(props: const { issueMap } = useIssues(); // derived values + const issue = issueMap[issueId]; const subIssues = subIssuesStore.subIssuesByIssueId(issueId); const isIssueSelected = selectionHelpers.getIsEntitySelected(issueId); const isIssueActive = selectionHelpers.getIsEntityActive(issueId); + if (!issue) return null; + return ( <> {/* first column/ issue name and key column */} @@ -104,7 +107,7 @@ export const SpreadsheetIssueRow = observer(function SpreadsheetIssueRow(props: })} verticalOffset={100} shouldRecordHeights={false} - defaultValue={shouldRenderByDefault || isIssueNew(issueMap[issueId])} + defaultValue={shouldRenderByDefault || isIssueNew(issue)} > | undefined, payload: Partial) => { + if (!workspaceSlug || !data?.project_id || !data?.id) return; + // return if user is not trying to change the cycle, i.e + // - cycle_id is not present in payload + // - cycle_id is the same as the current cycle id + if (!("cycle_id" in payload) || isEqual(data?.cycle_id, payload.cycle_id)) return; + + const slug = workspaceSlug.toString(); + + // Removing the cycle + const currentCycleId = data?.cycle_id; + if (currentCycleId && payload.cycle_id === null) { + await issues.removeIssueFromCycle(slug, data.project_id, currentCycleId, data.id); + fetchCycleDetails(slug, data.project_id, currentCycleId).catch((error) => { + console.error(error); + }); + } + + // Adding the cycle + const newCycleId = payload.cycle_id; + if (newCycleId && newCycleId !== "" && (payload.cycle_id !== cycleId || storeType !== EIssuesStoreType.CYCLE)) { + await addIssueToCycle(data as TBaseIssue, newCycleId); + } + }; + + const handleModuleChange = async (data: Partial, payload: Partial) => { + if (!workspaceSlug || !data?.project_id || !data?.id) return; + // return if user is not trying to change the module, i.e + // - module_ids is not present in payload + // - module_ids is not an array + // - module_ids is the same as the current module ids + if ( + !("module_ids" in payload) || + !Array.isArray(payload.module_ids) || + isEqual(data?.module_ids, payload.module_ids) + ) + return; + + const updatedModuleIds = xor(data.module_ids, payload.module_ids); + const modulesToAdd: string[] = []; + const modulesToRemove: string[] = []; + + for (const moduleId of updatedModuleIds) { + if (data.module_ids?.includes(moduleId)) { + modulesToRemove.push(moduleId); + } else { + modulesToAdd.push(moduleId); + } + } + // update modules if there are modules to add or remove + if (modulesToAdd.length > 0 || modulesToRemove.length > 0) { + await issues.changeModulesInIssue( + workspaceSlug.toString(), + data.project_id, + data.id, + modulesToAdd, + modulesToRemove + ); + } + }; + const handleUpdateIssue = async (payload: Partial): Promise => { if (!workspaceSlug || !payload.project_id || !data?.id) return; @@ -267,41 +328,10 @@ export const CreateUpdateIssueModalBase = observer(function CreateUpdateIssueMod if (isDraft) await draftIssues.updateIssue(workspaceSlug.toString(), data.id, payload); else if (updateIssue) await updateIssue(payload.project_id, data.id, payload); - // check if we should add/remove issue to/from cycle - if ( - payload.cycle_id && - payload.cycle_id !== "" && - (payload.cycle_id !== cycleId || storeType !== EIssuesStoreType.CYCLE) - ) { - await addIssueToCycle(data as TBaseIssue, payload.cycle_id); - } - if (data.cycle_id && !payload.cycle_id && data.project_id) { - await issues.removeIssueFromCycle(workspaceSlug.toString(), data.project_id, data.cycle_id, data.id); - fetchCycleDetails(workspaceSlug.toString(), data.project_id, data.cycle_id); - } - - if (data.module_ids && payload.module_ids && data.project_id) { - const updatedModuleIds = xor(data.module_ids, payload.module_ids); - const modulesToAdd: string[] = []; - const modulesToRemove: string[] = []; - - for (const moduleId of updatedModuleIds) { - if (data.module_ids.includes(moduleId)) { - modulesToRemove.push(moduleId); - } else { - modulesToAdd.push(moduleId); - } - } - await issues.changeModulesInIssue( - workspaceSlug.toString(), - data.project_id, - data.id, - modulesToAdd, - modulesToRemove - ); - } - - // add other property values + // Run cycle, module, and property changes sequentially to avoid + // optimistic store writes from racing against each other. + await handleCycleChange(data, payload); + await handleModuleChange(data, payload); await handleCreateUpdatePropertyValues({ issueId: data.id, issueTypeId: payload.type_id, diff --git a/apps/web/core/components/issues/issue-modal/form.tsx b/apps/web/core/components/issues/issue-modal/form.tsx index 01812b1bca9..33d7c599317 100644 --- a/apps/web/core/components/issues/issue-modal/form.tsx +++ b/apps/web/core/components/issues/issue-modal/form.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useState, useRef, useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; @@ -17,7 +16,6 @@ import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import type { TIssue, TWorkspaceDraftIssue } from "@plane/types"; -import { EIssuesStoreType } from "@plane/types"; // hooks import { ToggleSwitch } from "@plane/ui"; import { diff --git a/apps/web/core/components/issues/layout-quick-actions.tsx b/apps/web/core/components/issues/layout-quick-actions.tsx index 39f5061bea3..c68f9e907fb 100644 --- a/apps/web/core/components/issues/layout-quick-actions.tsx +++ b/apps/web/core/components/issues/layout-quick-actions.tsx @@ -10,7 +10,7 @@ import type { TContextMenuItem } from "@plane/ui"; import { CustomMenu } from "@plane/ui"; import { copyUrlToClipboard, cn } from "@plane/utils"; import { useLayoutMenuItems } from "@/components/common/quick-actions-helper"; -import { Ellipsis, MoreHorizontal } from "lucide-react"; +import { Ellipsis } from "lucide-react"; import { IconButton } from "@plane/propel/icon-button"; type Props = { diff --git a/apps/web/core/components/issues/peek-overview/error.tsx b/apps/web/core/components/issues/peek-overview/error.tsx index c616c3592cd..3d033598337 100644 --- a/apps/web/core/components/issues/peek-overview/error.tsx +++ b/apps/web/core/components/issues/peek-overview/error.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { MoveRight } from "lucide-react"; import { Tooltip } from "@plane/propel/tooltip"; // assets diff --git a/apps/web/core/components/issues/peek-overview/issue-detail.tsx b/apps/web/core/components/issues/peek-overview/issue-detail.tsx index bac7ea28bb1..6bd89124b62 100644 --- a/apps/web/core/components/issues/peek-overview/issue-detail.tsx +++ b/apps/web/core/components/issues/peek-overview/issue-detail.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useEffect } from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/peek-overview/loader.tsx b/apps/web/core/components/issues/peek-overview/loader.tsx index 0be333fe517..701f72844e6 100644 --- a/apps/web/core/components/issues/peek-overview/loader.tsx +++ b/apps/web/core/components/issues/peek-overview/loader.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { MoveRight } from "lucide-react"; import { Tooltip } from "@plane/propel/tooltip"; import { Loader } from "@plane/ui"; diff --git a/apps/web/core/components/issues/peek-overview/root.tsx b/apps/web/core/components/issues/peek-overview/root.tsx index 7e964edba4e..421aaebbdb0 100644 --- a/apps/web/core/components/issues/peek-overview/root.tsx +++ b/apps/web/core/components/issues/peek-overview/root.tsx @@ -83,7 +83,7 @@ export const IssuePeekOverview = observer(function IssuePeekOverview(props: IWor fetchActivities(workspaceSlug, projectId, issueId); return; }) - .catch((error) => { + .catch((_error) => { setToast({ title: t("toast.error"), type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/issues/peek-overview/view.tsx b/apps/web/core/components/issues/peek-overview/view.tsx index 8776b6d60a7..333e4038c3d 100644 --- a/apps/web/core/components/issues/peek-overview/view.tsx +++ b/apps/web/core/components/issues/peek-overview/view.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useRef, useState } from "react"; import { observer } from "mobx-react"; import { createPortal } from "react-dom"; diff --git a/apps/web/core/components/issues/relations/issue-list-item.tsx b/apps/web/core/components/issues/relations/issue-list-item.tsx index e5f3f450782..573a4b725a8 100644 --- a/apps/web/core/components/issues/relations/issue-list-item.tsx +++ b/apps/web/core/components/issues/relations/issue-list-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/relations/issue-list.tsx b/apps/web/core/components/issues/relations/issue-list.tsx index b5a23e77184..e6f245416ee 100644 --- a/apps/web/core/components/issues/relations/issue-list.tsx +++ b/apps/web/core/components/issues/relations/issue-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // plane imports diff --git a/apps/web/core/components/issues/relations/properties.tsx b/apps/web/core/components/issues/relations/properties.tsx index 80bf9567b41..0342d8cebf1 100644 --- a/apps/web/core/components/issues/relations/properties.tsx +++ b/apps/web/core/components/issues/relations/properties.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; // components diff --git a/apps/web/core/components/issues/title-input.tsx b/apps/web/core/components/issues/title-input.tsx index 921a8676a2d..ce82b0e7225 100644 --- a/apps/web/core/components/issues/title-input.tsx +++ b/apps/web/core/components/issues/title-input.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState, useEffect, useCallback, useRef } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx index b411ece6698..dd3c7b5998f 100644 --- a/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx +++ b/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useRef, useState } from "react"; import { omit } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/issues/workspace-draft/empty-state.tsx b/apps/web/core/components/issues/workspace-draft/empty-state.tsx index a720a58a5e7..a5d4f84c8b6 100644 --- a/apps/web/core/components/issues/workspace-draft/empty-state.tsx +++ b/apps/web/core/components/issues/workspace-draft/empty-state.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Fragment, useState } from "react"; // components import { observer } from "mobx-react"; diff --git a/apps/web/core/components/issues/workspace-draft/loader.tsx b/apps/web/core/components/issues/workspace-draft/loader.tsx index 60d0a610e5b..b301f946ab6 100644 --- a/apps/web/core/components/issues/workspace-draft/loader.tsx +++ b/apps/web/core/components/issues/workspace-draft/loader.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { range } from "lodash-es"; // components import { ListLoaderItemRow } from "@/components/ui/loader/layouts/list-layout-loader"; diff --git a/apps/web/core/components/labels/create-update-label-inline.tsx b/apps/web/core/components/labels/create-update-label-inline.tsx index 04660487197..6be483cd1a0 100644 --- a/apps/web/core/components/labels/create-update-label-inline.tsx +++ b/apps/web/core/components/labels/create-update-label-inline.tsx @@ -11,7 +11,7 @@ import type { SubmitHandler } from "react-hook-form"; import { Controller, useForm } from "react-hook-form"; import { Popover, Transition } from "@headlessui/react"; // plane imports -import { getRandomLabelColor, LABEL_COLOR_OPTIONS, PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; +import { getRandomLabelColor, LABEL_COLOR_OPTIONS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; @@ -91,7 +91,7 @@ export const CreateUpdateLabelInline = observer( await labelOperationsCallbacks .createLabel(formData) - .then((res) => { + .then((_res) => { handleClose(); reset(defaultValues); }) @@ -111,7 +111,7 @@ export const CreateUpdateLabelInline = observer( await labelOperationsCallbacks .updateLabel(labelToUpdate.id, formData) - .then((res) => { + .then((_res) => { reset(defaultValues); handleClose(); }) diff --git a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx index 3feecffeba6..f703ddf5816 100644 --- a/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx +++ b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { Fragment, useMemo, useState } from "react"; import { observer } from "mobx-react"; import { useSearchParams } from "next/navigation"; @@ -112,7 +111,7 @@ export const ModuleAnalyticsProgress = observer(function ModuleAnalyticsProgress await fetchModuleDetails(workspaceSlug, projectId, moduleId); } setLoader(false); - } catch (error) { + } catch (_error) { setLoader(false); setPlotType(moduleId, plotType); } diff --git a/apps/web/core/components/modules/archived-modules/header.tsx b/apps/web/core/components/modules/archived-modules/header.tsx index 4b58e4bb920..a15c431df2b 100644 --- a/apps/web/core/components/modules/archived-modules/header.tsx +++ b/apps/web/core/components/modules/archived-modules/header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useCallback, useRef, useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; diff --git a/apps/web/core/components/modules/archived-modules/view.tsx b/apps/web/core/components/modules/archived-modules/view.tsx index bea8c597fd7..f7a07b4685b 100644 --- a/apps/web/core/components/modules/archived-modules/view.tsx +++ b/apps/web/core/components/modules/archived-modules/view.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // assets import AllFiltersImage from "@/app/assets/empty-state/module/all-filters.svg?url"; diff --git a/apps/web/core/components/modules/links/create-update-modal.tsx b/apps/web/core/components/modules/links/create-update-modal.tsx index 9caa018023a..b99254aefd6 100644 --- a/apps/web/core/components/modules/links/create-update-modal.tsx +++ b/apps/web/core/components/modules/links/create-update-modal.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; // plane types diff --git a/apps/web/core/components/modules/modal.tsx b/apps/web/core/components/modules/modal.tsx index b85d9b48903..621bfa07585 100644 --- a/apps/web/core/components/modules/modal.tsx +++ b/apps/web/core/components/modules/modal.tsx @@ -58,7 +58,7 @@ export const CreateUpdateModuleModal = observer(function CreateUpdateModuleModal const selectedProjectId = payload.project_id ?? projectId.toString(); await createModule(workspaceSlug.toString(), selectedProjectId, payload) - .then((res) => { + .then((_res) => { handleClose(); setToast({ type: TOAST_TYPE.SUCCESS, @@ -80,7 +80,7 @@ export const CreateUpdateModuleModal = observer(function CreateUpdateModuleModal const selectedProjectId = payload.project_id ?? projectId.toString(); await updateModuleDetails(workspaceSlug.toString(), selectedProjectId, data.id, payload) - .then((res) => { + .then((_res) => { handleClose(); setToast({ diff --git a/apps/web/core/components/modules/module-list-item-action.tsx b/apps/web/core/components/modules/module-list-item-action.tsx index 73746d05351..3340fab1d63 100644 --- a/apps/web/core/components/modules/module-list-item-action.tsx +++ b/apps/web/core/components/modules/module-list-item-action.tsx @@ -9,14 +9,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { SquareUser } from "lucide-react"; // Plane imports -import { - MODULE_STATUS, - EUserPermissions, - EUserPermissionsLevel, - IS_FAVORITE_MENU_OPEN, - MODULE_TRACKER_EVENTS, - MODULE_TRACKER_ELEMENTS, -} from "@plane/constants"; +import { MODULE_STATUS, EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants"; import { useLocalStorage } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/propel/toast"; diff --git a/apps/web/core/components/modules/module-status-dropdown.tsx b/apps/web/core/components/modules/module-status-dropdown.tsx index b0bf9b8cb65..ef532e68b16 100644 --- a/apps/web/core/components/modules/module-status-dropdown.tsx +++ b/apps/web/core/components/modules/module-status-dropdown.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import { observer } from "mobx-react"; import { MODULE_STATUS } from "@plane/constants"; diff --git a/apps/web/core/components/modules/module-view-header.tsx b/apps/web/core/components/modules/module-view-header.tsx index baf978a0132..916bfe95b6a 100644 --- a/apps/web/core/components/modules/module-view-header.tsx +++ b/apps/web/core/components/modules/module-view-header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useCallback, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; diff --git a/apps/web/core/components/modules/quick-actions.tsx b/apps/web/core/components/modules/quick-actions.tsx index 771635e00e1..f62e5cc3009 100644 --- a/apps/web/core/components/modules/quick-actions.tsx +++ b/apps/web/core/components/modules/quick-actions.tsx @@ -9,7 +9,6 @@ import { observer } from "mobx-react"; import { MoreHorizontal } from "lucide-react"; // plane imports import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; import { IconButton } from "@plane/propel/icon-button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import type { TContextMenuItem } from "@plane/ui"; @@ -44,7 +43,6 @@ export const ModuleQuickActions = observer(function ModuleQuickActions(props: Pr const { getModuleById, restoreModule } = useModule(); - const { t } = useTranslation(); // derived values const moduleDetails = getModuleById(moduleId); // auth diff --git a/apps/web/core/components/navigation/customize-navigation-dialog.tsx b/apps/web/core/components/navigation/customize-navigation-dialog.tsx index 4d7c824951b..b4390bd0188 100644 --- a/apps/web/core/components/navigation/customize-navigation-dialog.tsx +++ b/apps/web/core/components/navigation/customize-navigation-dialog.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useCallback, useMemo, useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; diff --git a/apps/web/core/components/navigation/tab-navigation-root.tsx b/apps/web/core/components/navigation/tab-navigation-root.tsx index c53fc45053f..f3bd16c60d9 100644 --- a/apps/web/core/components/navigation/tab-navigation-root.tsx +++ b/apps/web/core/components/navigation/tab-navigation-root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useEffect } from "react"; import { observer } from "mobx-react"; import { useParams, useLocation, Link, useNavigate } from "react-router"; diff --git a/apps/web/core/components/onboarding/header.tsx b/apps/web/core/components/onboarding/header.tsx index 7efe5aafffb..224fca5f09f 100644 --- a/apps/web/core/components/onboarding/header.tsx +++ b/apps/web/core/components/onboarding/header.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { PlaneLockup, ChevronLeftIcon } from "@plane/propel/icons"; @@ -13,6 +12,7 @@ import type { TOnboardingStep } from "@plane/types"; import { EOnboardingSteps } from "@plane/types"; import { cn } from "@plane/utils"; // hooks +import { useInstance } from "@/hooks/store/use-instance"; import { useUser } from "@/hooks/store/user"; // local imports import { SwitchAccountDropdown } from "./switch-account-dropdown"; @@ -27,6 +27,8 @@ export const OnboardingHeader = observer(function OnboardingHeader(props: Onboar const { currentStep, updateCurrentStep, hasInvitations } = props; // store hooks const { data: user } = useUser(); + const { config: instanceConfig } = useInstance(); + const isSelfManaged = instanceConfig?.is_self_managed; // handle step back const handleStepBack = () => { @@ -38,7 +40,7 @@ export const OnboardingHeader = observer(function OnboardingHeader(props: Onboar updateCurrentStep(EOnboardingSteps.ROLE_SETUP); break; case EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN: - updateCurrentStep(EOnboardingSteps.USE_CASE_SETUP); + updateCurrentStep(isSelfManaged ? EOnboardingSteps.PROFILE_SETUP : EOnboardingSteps.USE_CASE_SETUP); break; } }; @@ -46,22 +48,18 @@ export const OnboardingHeader = observer(function OnboardingHeader(props: Onboar // can go back const canGoBack = ![EOnboardingSteps.PROFILE_SETUP, EOnboardingSteps.INVITE_MEMBERS].includes(currentStep); - // Get current step number for progress tracking - const getCurrentStepNumber = (): number => { - const stepOrder: TOnboardingStep[] = [ - EOnboardingSteps.PROFILE_SETUP, - EOnboardingSteps.ROLE_SETUP, - EOnboardingSteps.USE_CASE_SETUP, - ...(hasInvitations - ? [EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN] - : [EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN, EOnboardingSteps.INVITE_MEMBERS]), - ]; - return stepOrder.indexOf(currentStep) + 1; - }; + // step order for progress tracking — include INVITE_MEMBERS if user is currently on it + const showInviteStep = !hasInvitations || currentStep === EOnboardingSteps.INVITE_MEMBERS; + const stepOrder: TOnboardingStep[] = [ + EOnboardingSteps.PROFILE_SETUP, + ...(isSelfManaged ? [] : [EOnboardingSteps.ROLE_SETUP, EOnboardingSteps.USE_CASE_SETUP]), + EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN, + ...(showInviteStep ? [EOnboardingSteps.INVITE_MEMBERS] : []), + ]; // derived values - const currentStepNumber = getCurrentStepNumber(); - const totalSteps = hasInvitations ? 4 : 5; // 4 if invites available, 5 if not + const currentStepNumber = stepOrder.indexOf(currentStep) + 1; + const totalSteps = stepOrder.length; const userName = user?.display_name ? user?.display_name : user?.first_name diff --git a/apps/web/core/components/onboarding/invite-members.tsx b/apps/web/core/components/onboarding/invite-members.tsx index acac3446eec..b73c87bb8b8 100644 --- a/apps/web/core/components/onboarding/invite-members.tsx +++ b/apps/web/core/components/onboarding/invite-members.tsx @@ -262,7 +262,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe }); export function InviteMembers(props: Props) { - const { finishOnboarding, totalSteps, workspace } = props; + const { finishOnboarding, workspace } = props; const [isInvitationDisabled, setIsInvitationDisabled] = useState(true); diff --git a/apps/web/core/components/onboarding/root.tsx b/apps/web/core/components/onboarding/root.tsx index cc8e7cfe41f..395e19b0957 100644 --- a/apps/web/core/components/onboarding/root.tsx +++ b/apps/web/core/components/onboarding/root.tsx @@ -11,6 +11,7 @@ import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import type { IWorkspaceMemberInvitation, TOnboardingStep, TOnboardingSteps, TUserProfile } from "@plane/types"; import { EOnboardingSteps } from "@plane/types"; // hooks +import { useInstance } from "@/hooks/store/use-instance"; import { useWorkspace } from "@/hooks/store/use-workspace"; import { useUser, useUserProfile } from "@/hooks/store/user"; // local components @@ -27,8 +28,10 @@ export const OnboardingRoot = observer(function OnboardingRoot({ invitations = [ const { data: user } = useUser(); const { data: userProfile, updateUserProfile, finishUserOnboarding } = useUserProfile(); const { workspaces } = useWorkspace(); + const { config: instanceConfig } = useInstance(); const workspacesList = Object.values(workspaces ?? {}); + const isSelfManaged = instanceConfig?.is_self_managed; // Calculate total steps based on whether invitations are available const hasInvitations = invitations.length > 0; @@ -68,7 +71,14 @@ export const OnboardingRoot = observer(function OnboardingRoot({ invitations = [ (step: EOnboardingSteps, skipInvites?: boolean) => { switch (step) { case EOnboardingSteps.PROFILE_SETUP: - setCurrentStep(EOnboardingSteps.ROLE_SETUP); + if (isSelfManaged) { + // Skip role & use case steps for self-hosted + stepChange({ profile_complete: true }); + if (workspacesList.length > 0) finishOnboarding(); + else setCurrentStep(EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN); + } else { + setCurrentStep(EOnboardingSteps.ROLE_SETUP); + } break; case EOnboardingSteps.ROLE_SETUP: setCurrentStep(EOnboardingSteps.USE_CASE_SETUP); @@ -91,7 +101,7 @@ export const OnboardingRoot = observer(function OnboardingRoot({ invitations = [ break; } }, - [stepChange, finishOnboarding, workspacesList] + [stepChange, finishOnboarding, workspacesList, isSelfManaged] ); const updateCurrentStep = (step: EOnboardingSteps) => setCurrentStep(step); diff --git a/apps/web/core/components/onboarding/steps/common/header.tsx b/apps/web/core/components/onboarding/steps/common/header.tsx index f6891126a51..69be93c6fa4 100644 --- a/apps/web/core/components/onboarding/steps/common/header.tsx +++ b/apps/web/core/components/onboarding/steps/common/header.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - type Props = { title: string; description: string; diff --git a/apps/web/core/components/onboarding/steps/profile/consent.tsx b/apps/web/core/components/onboarding/steps/profile/consent.tsx index 62927e43731..18f42063c8f 100644 --- a/apps/web/core/components/onboarding/steps/profile/consent.tsx +++ b/apps/web/core/components/onboarding/steps/profile/consent.tsx @@ -4,8 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; - import { CheckIcon } from "@plane/propel/icons"; type Props = { diff --git a/apps/web/core/components/onboarding/switch-account-dropdown.tsx b/apps/web/core/components/onboarding/switch-account-dropdown.tsx index aae4375249d..bf96aae6198 100644 --- a/apps/web/core/components/onboarding/switch-account-dropdown.tsx +++ b/apps/web/core/components/onboarding/switch-account-dropdown.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; import { Menu, Transition } from "@headlessui/react"; diff --git a/apps/web/core/components/pages/editor/editor-body.tsx b/apps/web/core/components/pages/editor/editor-body.tsx index 907c6d9e405..9270386dc0a 100644 --- a/apps/web/core/components/pages/editor/editor-body.tsx +++ b/apps/web/core/components/pages/editor/editor-body.tsx @@ -45,7 +45,6 @@ import type { TPageInstance } from "@/store/pages/base-page"; import { PageContentLoader } from "../loaders/page-content-loader"; import { PageEditorHeaderRoot } from "./header"; import { PageContentBrowser } from "./summary"; -import { PageEditorTitle } from "./title"; export type TEditorBodyConfig = { fileHandler: TFileHandler; diff --git a/apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx b/apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx index 291f3cb47c1..a1c62bba10a 100644 --- a/apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx +++ b/apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx @@ -10,7 +10,6 @@ import { ArrowUpToLine, Clipboard, History } from "lucide-react"; // plane imports import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import { ToggleSwitch } from "@plane/ui"; -import { copyTextToClipboard } from "@plane/utils"; // hooks import { useAppRouter } from "@/hooks/use-app-router"; import { usePageFilters } from "@/hooks/use-page-filters"; diff --git a/apps/web/core/components/pages/list/order-by.tsx b/apps/web/core/components/pages/list/order-by.tsx index 60030c2e8fb..2e9f22f0ad7 100644 --- a/apps/web/core/components/pages/list/order-by.tsx +++ b/apps/web/core/components/pages/list/order-by.tsx @@ -4,11 +4,11 @@ * See the LICENSE file for details. */ -import { ArrowDownWideNarrow, ArrowUpWideNarrow, Check } from "lucide-react"; +import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react"; // plane imports import { getButtonStyling } from "@plane/propel/button"; // types -import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons"; +import { CheckIcon } from "@plane/propel/icons"; import type { TPageFiltersSortBy, TPageFiltersSortKey } from "@plane/types"; import { CustomMenu } from "@plane/ui"; diff --git a/apps/web/core/components/pages/navigation-pane/root.tsx b/apps/web/core/components/pages/navigation-pane/root.tsx index 0c3370d4781..079cf8b5f64 100644 --- a/apps/web/core/components/pages/navigation-pane/root.tsx +++ b/apps/web/core/components/pages/navigation-pane/root.tsx @@ -4,13 +4,13 @@ * See the LICENSE file for details. */ -import React, { useCallback } from "react"; +import { useCallback } from "react"; import { observer } from "mobx-react"; import { useRouter, useSearchParams } from "next/navigation"; import { ArrowRightCircle } from "lucide-react"; -import { Tab } from "@headlessui/react"; // plane imports import { useTranslation } from "@plane/i18n"; +import { Tabs } from "@plane/propel/tabs"; import { Tooltip } from "@plane/propel/tooltip"; // hooks import { useQueryParams } from "@/hooks/use-query-params"; @@ -26,7 +26,6 @@ import { PageNavigationPaneTabsList } from "./tabs-list"; import type { INavigationPaneExtension } from "./types/extensions"; import { - PAGE_NAVIGATION_PANE_TAB_KEYS, PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM, PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM, PAGE_NAVIGATION_PANE_WIDTH, @@ -55,7 +54,6 @@ export const PageNavigationPaneRoot = observer(function PageNavigationPaneRoot(p PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM ) as TPageNavigationPaneTab | null; const activeTab: TPageNavigationPaneTab = navigationPaneQueryParam || "outline"; - const selectedIndex = PAGE_NAVIGATION_PANE_TAB_KEYS.indexOf(activeTab); // Check if any extension is currently active based on query parameters const ActiveExtension = extensions.find((extension) => { @@ -75,8 +73,8 @@ export const PageNavigationPaneRoot = observer(function PageNavigationPaneRoot(p const { t } = useTranslation(); const handleTabChange = useCallback( - (index: number) => { - const updatedTab = PAGE_NAVIGATION_PANE_TAB_KEYS[index]; + (value: string) => { + const updatedTab = value as TPageNavigationPaneTab; const isUpdatedTabInfo = updatedTab === "info"; const updatedRoute = updateQueryParams({ paramsToAdd: { [PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM]: updatedTab }, @@ -112,10 +110,10 @@ export const PageNavigationPaneRoot = observer(function PageNavigationPaneRoot(p {ActiveExtension ? ( ) : showNavigationTabs ? ( - + - + ) : null}
diff --git a/apps/web/core/components/pages/navigation-pane/tabs-list.tsx b/apps/web/core/components/pages/navigation-pane/tabs-list.tsx index 76469a7c971..3ba55f6a2c3 100644 --- a/apps/web/core/components/pages/navigation-pane/tabs-list.tsx +++ b/apps/web/core/components/pages/navigation-pane/tabs-list.tsx @@ -4,9 +4,9 @@ * See the LICENSE file for details. */ -import { Tab } from "@headlessui/react"; // plane imports import { useTranslation } from "@plane/i18n"; +import { Tabs } from "@plane/propel/tabs"; // plane web components import { ORDERED_PAGE_NAVIGATION_TABS_LIST } from "@/plane-web/components/pages/navigation-pane"; @@ -15,29 +15,15 @@ export function PageNavigationPaneTabsList() { const { t } = useTranslation(); return ( - - {({ selectedIndex }) => ( - <> - {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => ( - - {t(tab.i18n_label)} - - ))} - {/* active tab indicator */} -
- - )} - +
+ + {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => ( + + {t(tab.i18n_label)} + + ))} + + +
); } diff --git a/apps/web/core/components/power-k/config/help-commands.ts b/apps/web/core/components/power-k/config/help-commands.ts index 0543e6698df..79e47354d56 100644 --- a/apps/web/core/components/power-k/config/help-commands.ts +++ b/apps/web/core/components/power-k/config/help-commands.ts @@ -9,7 +9,6 @@ import { FileText, GithubIcon, MessageSquare, Rocket } from "lucide-react"; import type { TPowerKCommandConfig } from "@/components/power-k/core/types"; // hooks import { usePowerK } from "@/hooks/store/use-power-k"; -import { useChatSupport } from "@/hooks/use-chat-support"; /** * Help commands - Help related commands @@ -17,7 +16,6 @@ import { useChatSupport } from "@/hooks/use-chat-support"; export const usePowerKHelpCommands = (): TPowerKCommandConfig[] => { // store const { toggleShortcutsListModal } = usePowerK(); - const { isEnabled: isChatSupportEnabled, openChatSupport } = useChatSupport(); return [ { @@ -71,16 +69,5 @@ export const usePowerKHelpCommands = (): TPowerKCommandConfig[] => { isVisible: () => true, closeOnSelect: true, }, - { - id: "chat_with_us", - type: "action", - group: "help", - i18n_title: "power_k.help_actions.chat_with_us", - icon: MessageSquare, - action: () => openChatSupport(), - isEnabled: () => isChatSupportEnabled, - isVisible: () => isChatSupportEnabled, - closeOnSelect: true, - }, ]; }; diff --git a/apps/web/core/components/power-k/ui/modal/footer.tsx b/apps/web/core/components/power-k/ui/modal/footer.tsx index cf22070a051..092e4f6da41 100644 --- a/apps/web/core/components/power-k/ui/modal/footer.tsx +++ b/apps/web/core/components/power-k/ui/modal/footer.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type React from "react"; import { observer } from "mobx-react"; // plane imports import { useTranslation } from "@plane/i18n"; diff --git a/apps/web/core/components/power-k/ui/modal/search-results.tsx b/apps/web/core/components/power-k/ui/modal/search-results.tsx index 12c49304f9b..eaa5eb9b876 100644 --- a/apps/web/core/components/power-k/ui/modal/search-results.tsx +++ b/apps/web/core/components/power-k/ui/modal/search-results.tsx @@ -12,7 +12,6 @@ import type { IWorkspaceSearchResults } from "@plane/types"; // hooks import { useAppRouter } from "@/hooks/use-app-router"; // helpers -import { openProjectAndScrollToSidebar } from "../../actions/helper"; import { PowerKModalCommandItem } from "./command-item"; import { POWER_K_SEARCH_RESULTS_GROUPS_MAP } from "./search-results-map"; diff --git a/apps/web/core/components/power-k/ui/modal/shortcuts-root.tsx b/apps/web/core/components/power-k/ui/modal/shortcuts-root.tsx index 50b0e305098..acf392350cd 100644 --- a/apps/web/core/components/power-k/ui/modal/shortcuts-root.tsx +++ b/apps/web/core/components/power-k/ui/modal/shortcuts-root.tsx @@ -8,6 +8,7 @@ import { useState, Fragment } from "react"; import { Dialog, Transition } from "@headlessui/react"; // plane imports import { CloseIcon, SearchIcon } from "@plane/propel/icons"; +import { ScrollArea } from "@plane/propel/scrollarea"; import { Input } from "@plane/ui"; // hooks import { usePowerK } from "@/hooks/store/use-power-k"; @@ -61,28 +62,33 @@ export function ShortcutsModal(props: Props) { leaveTo="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" > -
- +
+ Keyboard shortcuts -
- - setQuery(e.target.value)} - placeholder="Search for shortcuts" - className="w-full border-none bg-transparent py-1 text-11 text-secondary outline-none" - autoFocus - tabIndex={1} - /> +
+
+ + setQuery(e.target.value)} + placeholder="Search for shortcuts" + className="w-full border-none bg-transparent py-1 text-11 text-secondary outline-none" + autoFocus + tabIndex={1} + /> +
- + + + +
diff --git a/apps/web/core/components/power-k/ui/renderer/shortcut.tsx b/apps/web/core/components/power-k/ui/renderer/shortcut.tsx index c2a9f04cf6d..9f4d5098430 100644 --- a/apps/web/core/components/power-k/ui/renderer/shortcut.tsx +++ b/apps/web/core/components/power-k/ui/renderer/shortcut.tsx @@ -78,7 +78,7 @@ export function ShortcutRenderer(props: Props) { const isShortcutsEmpty = groupedCommands.length === 0; return ( -
+
{!isShortcutsEmpty ? ( groupedCommands.map((group) => (
diff --git a/apps/web/core/components/profile/overview/activity.tsx b/apps/web/core/components/profile/overview/activity.tsx index cda3b8fb842..23bb961f770 100644 --- a/apps/web/core/components/profile/overview/activity.tsx +++ b/apps/web/core/components/profile/overview/activity.tsx @@ -9,6 +9,7 @@ import { useParams } from "next/navigation"; import useSWR from "swr"; // ui import { useTranslation } from "@plane/i18n"; +import { Avatar } from "@plane/propel/avatar"; import { EmptyStateCompact } from "@plane/propel/empty-state"; import { Loader, Card } from "@plane/ui"; import { calculateTimeAgo, getFileURL } from "@plane/utils"; @@ -49,19 +50,12 @@ export const ProfileActivity = observer(function ProfileActivity() {
{userProfileActivity.results.map((activity) => (
-
- {activity.actor_detail?.avatar_url && activity.actor_detail?.avatar_url !== "" ? ( - {activity.actor_detail?.display_name} - ) : ( -
- {activity.actor_detail?.display_name?.charAt(0)} -
- )} -
+

diff --git a/apps/web/core/components/project-states/create-update/create.tsx b/apps/web/core/components/project-states/create-update/create.tsx index 0505fcb5870..85f084f6a42 100644 --- a/apps/web/core/components/project-states/create-update/create.tsx +++ b/apps/web/core/components/project-states/create-update/create.tsx @@ -34,7 +34,7 @@ export const StateCreate = observer(function StateCreate(props: TStateCreate) { if (!groupKey) return { status: "error" }; try { - const response = await createStateCallback({ ...formData, group: groupKey }); + await createStateCallback({ ...formData, group: groupKey }); setToast({ type: TOAST_TYPE.SUCCESS, diff --git a/apps/web/core/components/project-states/root.tsx b/apps/web/core/components/project-states/root.tsx index 8aac7f4d8b2..20e0dd393d9 100644 --- a/apps/web/core/components/project-states/root.tsx +++ b/apps/web/core/components/project-states/root.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useMemo } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; diff --git a/apps/web/core/components/project/dropdowns/order-by.tsx b/apps/web/core/components/project/dropdowns/order-by.tsx index ad00e3b2e00..5b83e0c2879 100644 --- a/apps/web/core/components/project/dropdowns/order-by.tsx +++ b/apps/web/core/components/project/dropdowns/order-by.tsx @@ -9,7 +9,7 @@ import { ArrowDownWideNarrow } from "lucide-react"; import { PROJECT_ORDER_BY_OPTIONS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/propel/button"; -import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons"; +import { CheckIcon } from "@plane/propel/icons"; import type { TProjectOrderByOptions } from "@plane/types"; import { CustomMenu } from "@plane/ui"; diff --git a/apps/web/core/components/project/form.tsx b/apps/web/core/components/project/form.tsx index b14b63cd61f..2d7575436f3 100644 --- a/apps/web/core/components/project/form.tsx +++ b/apps/web/core/components/project/form.tsx @@ -418,7 +418,7 @@ export function ProjectDetailsForm(props: IProjectDetailsForm) { onChange(value); }} error={Boolean(errors.timezone)} - buttonClassName="border-none" + buttonClassName="!border-subtle !shadow-none font-medium rounded-md" disabled={!isAdmin} /> diff --git a/apps/web/core/components/project/leave-project-modal.tsx b/apps/web/core/components/project/leave-project-modal.tsx index 0f4b32ae02d..262a1237bef 100644 --- a/apps/web/core/components/project/leave-project-modal.tsx +++ b/apps/web/core/components/project/leave-project-modal.tsx @@ -64,7 +64,7 @@ export const LeaveProjectModal = observer(function LeaveProjectModal(props: ILea .then(() => { handleClose(); }) - .catch((err) => { + .catch((_err) => { setToast({ type: TOAST_TYPE.ERROR, title: "Error!", diff --git a/apps/web/core/components/settings/profile/content/pages/general/form.tsx b/apps/web/core/components/settings/profile/content/pages/general/form.tsx index 778e2024de8..e20245f8352 100644 --- a/apps/web/core/components/settings/profile/content/pages/general/form.tsx +++ b/apps/web/core/components/settings/profile/content/pages/general/form.tsx @@ -150,13 +150,32 @@ export const GeneralProfileSettingsForm = observer(function GeneralProfileSettin role: formData.role, }; - const updateCurrentUserDetail = updateCurrentUser(userPayload).finally(() => setIsLoading(false)); - const updateCurrentUserProfile = updateUserProfile(profilePayload).finally(() => setIsLoading(false)); + const updateCurrentUserDetail = updateCurrentUser(userPayload); + const promises: Promise[] = [updateCurrentUserDetail]; + if (profilePayload.role !== profile.role) { + const updateCurrentUserProfile = updateUserProfile(profilePayload); + promises.push(updateCurrentUserProfile); + } - const promises = [updateCurrentUserDetail, updateCurrentUserProfile]; - const updateUserAndProfile = Promise.all(promises); + const updatePromise = Promise.allSettled(promises) + .then((results) => { + const rejectedResult = results.find((result) => result.status === "rejected") as + | PromiseRejectedResult + | undefined; + if (rejectedResult) { + throw rejectedResult.reason ?? new Error("Failed to update profile"); + } + const values = results.map( + (result) => (result as PromiseFulfilledResult).value + ); + if (values.some((v) => v === undefined)) { + throw new Error("Failed to update profile"); + } + return values; + }) + .finally(() => setIsLoading(false)); - setPromiseToast(updateUserAndProfile, { + setPromiseToast(updatePromise, { loading: "Updating...", success: { title: "Success!", @@ -167,11 +186,6 @@ export const GeneralProfileSettingsForm = observer(function GeneralProfileSettin message: () => `There was some error in updating your profile. Please try again.`, }, }); - updateUserAndProfile - .then(() => { - return; - }) - .catch(() => {}); }; return ( diff --git a/apps/web/core/components/sidebar/add-button.tsx b/apps/web/core/components/sidebar/add-button.tsx index 1e41f5192f0..6db327e363b 100644 --- a/apps/web/core/components/sidebar/add-button.tsx +++ b/apps/web/core/components/sidebar/add-button.tsx @@ -5,7 +5,6 @@ */ import { Button } from "@plane/propel/button"; -import { cn } from "@plane/utils"; type Props = React.ComponentProps<"button"> & { label: React.ReactNode; diff --git a/apps/web/core/components/views/filters/order-by.tsx b/apps/web/core/components/views/filters/order-by.tsx index bb27650f69f..33360658864 100644 --- a/apps/web/core/components/views/filters/order-by.tsx +++ b/apps/web/core/components/views/filters/order-by.tsx @@ -9,7 +9,7 @@ import { ArrowDownWideNarrow, ArrowUpWideNarrow } from "lucide-react"; import { VIEW_SORT_BY_OPTIONS, VIEW_SORTING_KEY_OPTIONS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/propel/button"; -import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons"; +import { CheckIcon } from "@plane/propel/icons"; import type { TViewFiltersSortBy, TViewFiltersSortKey } from "@plane/types"; import { CustomMenu } from "@plane/ui"; diff --git a/apps/web/core/components/views/view-list-item-action.tsx b/apps/web/core/components/views/view-list-item-action.tsx index 3e917a01544..5bfa74a32bc 100644 --- a/apps/web/core/components/views/view-list-item-action.tsx +++ b/apps/web/core/components/views/view-list-item-action.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; diff --git a/apps/web/core/components/views/view-list-item.tsx b/apps/web/core/components/views/view-list-item.tsx index 511759bf150..a790daca062 100644 --- a/apps/web/core/components/views/view-list-item.tsx +++ b/apps/web/core/components/views/view-list-item.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useRef } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; diff --git a/apps/web/core/components/web-hooks/form/secret-key.tsx b/apps/web/core/components/web-hooks/form/secret-key.tsx index 50ec98ea479..98bf1b73c88 100644 --- a/apps/web/core/components/web-hooks/form/secret-key.tsx +++ b/apps/web/core/components/web-hooks/form/secret-key.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { useState } from "react"; import { range } from "lodash-es"; import { observer } from "mobx-react"; diff --git a/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx b/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx index a6b39246ed2..935c36ae503 100644 --- a/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx +++ b/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // plane imports diff --git a/apps/web/core/components/workspace/billing/comparison/feature-detail.tsx b/apps/web/core/components/workspace/billing/comparison/feature-detail.tsx index 5476f142a15..b3335f3454b 100644 --- a/apps/web/core/components/workspace/billing/comparison/feature-detail.tsx +++ b/apps/web/core/components/workspace/billing/comparison/feature-detail.tsx @@ -7,7 +7,6 @@ import { CheckCircle2, Minus, MinusCircle } from "lucide-react"; import type { EProductSubscriptionEnum } from "@plane/types"; // plane imports -import { cn } from "@plane/utils"; // constants import type { TPlanFeatureData } from "@/constants/plans"; @@ -17,7 +16,7 @@ type TPlanFeatureDetailProps = { }; export function PlanFeatureDetail(props: TPlanFeatureDetailProps) { - const { subscriptionType, data } = props; + const { data } = props; if (data === null || data === undefined) { return ; diff --git a/apps/web/core/components/workspace/sidebar/help-section/root.tsx b/apps/web/core/components/workspace/sidebar/help-section/root.tsx index dea70d90aec..48cd1898a6e 100644 --- a/apps/web/core/components/workspace/sidebar/help-section/root.tsx +++ b/apps/web/core/components/workspace/sidebar/help-section/root.tsx @@ -6,7 +6,7 @@ import React, { useState } from "react"; import { observer } from "mobx-react"; -import { HelpCircle, MessagesSquare, User } from "lucide-react"; +import { HelpCircle, User } from "lucide-react"; import { useTranslation } from "@plane/i18n"; import { PageIcon } from "@plane/propel/icons"; // ui @@ -16,7 +16,6 @@ import { ProductUpdatesModal } from "@/components/global"; import { AppSidebarItem } from "@/components/sidebar/sidebar-item"; // hooks import { usePowerK } from "@/hooks/store/use-power-k"; -import { useChatSupport } from "@/hooks/use-chat-support"; // plane web components import { PlaneVersionNumber } from "@/plane-web/components/global"; @@ -24,7 +23,6 @@ export const HelpMenuRoot = observer(function HelpMenuRoot() { // store hooks const { t } = useTranslation(); const { toggleShortcutsListModal } = usePowerK(); - const { openChatSupport, isEnabled: isChatSupportEnabled } = useChatSupport(); // states const [isNeedHelpOpen, setIsNeedHelpOpen] = useState(false); const [isProductUpdatesModalOpen, setProductUpdatesModalOpen] = useState(false); @@ -56,18 +54,6 @@ export const HelpMenuRoot = observer(function HelpMenuRoot() { {t("documentation")}

- {isChatSupportEnabled && ( - - - - )} window.open("mailto:sales@plane.so", "_blank")}>
diff --git a/apps/web/core/custom-events/chat-support.ts b/apps/web/core/custom-events/chat-support.ts deleted file mode 100644 index 8c7d0fa5c35..00000000000 --- a/apps/web/core/custom-events/chat-support.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -type ChatSupportType = "open"; - -type ChatSupportEventType = `chat-support:${ChatSupportType}`; - -export const CHAT_SUPPORT_EVENTS = { - open: "chat-support:open", -} satisfies Record; - -export class ChatSupportEvent extends CustomEvent { - constructor(type: ChatSupportType) { - super(CHAT_SUPPORT_EVENTS[type]); - } -} diff --git a/apps/web/core/hooks/use-chat-support.ts b/apps/web/core/hooks/use-chat-support.ts deleted file mode 100644 index b4e3e70a0cb..00000000000 --- a/apps/web/core/hooks/use-chat-support.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { useCallback } from "react"; -// custom events -import { ChatSupportEvent } from "@/custom-events/chat-support"; -// hooks -import { useInstance } from "@/hooks/store/use-instance"; -import { useUser } from "@/hooks/store/user"; - -export interface IUseChatSupport { - openChatSupport: () => void; - isEnabled: boolean; -} - -export const useChatSupport = (): IUseChatSupport => { - const { data: user } = useUser(); - const { config } = useInstance(); - // derived values - const isEnabled = Boolean(user && config?.is_intercom_enabled && config?.intercom_app_id); - - const openChatSupport = useCallback(() => { - if (!isEnabled) return; - window.dispatchEvent(new ChatSupportEvent("open")); - }, [isEnabled]); - - return { openChatSupport, isEnabled }; -}; diff --git a/apps/web/core/hooks/use-collaborative-page-actions.tsx b/apps/web/core/hooks/use-collaborative-page-actions.tsx index 7fc1491ff27..d212b47da65 100644 --- a/apps/web/core/hooks/use-collaborative-page-actions.tsx +++ b/apps/web/core/hooks/use-collaborative-page-actions.tsx @@ -5,7 +5,7 @@ */ import { useState, useEffect, useCallback, useMemo } from "react"; -import type { EditorRefApi, TDocumentEventsServer } from "@plane/editor"; +import type { TDocumentEventsServer } from "@plane/editor"; import type { TDocumentEventsClient } from "@plane/editor/lib"; import { DocumentCollaborativeEvents, getServerEventName } from "@plane/editor/lib"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; diff --git a/apps/web/core/services/analytics.service.ts b/apps/web/core/services/analytics.service.ts index 9b0c9431df0..4480d37bd07 100644 --- a/apps/web/core/services/analytics.service.ts +++ b/apps/web/core/services/analytics.service.ts @@ -88,7 +88,7 @@ export class AnalyticsService extends APIService { }); } - processUrl( + processUrl<_T extends string>( endpoint: string, workspaceSlug: string, tab: TAnalyticsGraphsBase | TAnalyticsTabsBase, diff --git a/apps/web/core/services/instance.service.ts b/apps/web/core/services/instance.service.ts index ae2e9d516ff..875401da36b 100644 --- a/apps/web/core/services/instance.service.ts +++ b/apps/web/core/services/instance.service.ts @@ -6,7 +6,7 @@ // types import { API_BASE_URL } from "@plane/constants"; -import type { IInstanceInfo, TPage } from "@plane/types"; +import type { IInstanceInfo } from "@plane/types"; // helpers // services import { APIService } from "@/services/api.service"; diff --git a/apps/web/core/store/issue/issue-details/relation.store.ts b/apps/web/core/store/issue/issue-details/relation.store.ts index f03b73cf3a1..4cdabd8a8cf 100644 --- a/apps/web/core/store/issue/issue-details/relation.store.ts +++ b/apps/web/core/store/issue/issue-details/relation.store.ts @@ -305,7 +305,7 @@ export class IssueRelationStore implements IIssueRelationStore { set(this.relationMap, [issueId], issueRelations); } }); - } catch (e) { + } catch (_e) { console.error("Error while extracting issue relations from issues"); } }; diff --git a/apps/web/core/store/issue/issue-details/root.store.ts b/apps/web/core/store/issue/issue-details/root.store.ts index ea0775aa157..77c7b64323d 100644 --- a/apps/web/core/store/issue/issue-details/root.store.ts +++ b/apps/web/core/store/issue/issue-details/root.store.ts @@ -23,7 +23,6 @@ import type { IIssueActivityStoreActions, TActivityLoader, } from "@/plane-web/store/issue/issue-details/activity.store"; -import type { RootStore } from "@/plane-web/store/root.store"; import type { TIssueRelationTypes } from "@/plane-web/types"; import type { IIssueRootStore } from "../root.store"; import { IssueAttachmentStore } from "./attachment.store"; diff --git a/apps/web/core/store/issue/module/issue.store.ts b/apps/web/core/store/issue/module/issue.store.ts index 973ff92fcd0..4f3fbddbf82 100644 --- a/apps/web/core/store/issue/module/issue.store.ts +++ b/apps/web/core/store/issue/module/issue.store.ts @@ -117,7 +117,7 @@ export class ModuleIssues extends BaseIssuesStore implements IModuleIssues { const moduleId = id ?? this.moduleId; moduleId && this.rootIssueStore.rootStore.module.updateModuleDistribution(distributionUpdates, moduleId); - } catch (e) { + } catch (_e) { console.warn("could not update module statistics"); } }; diff --git a/apps/web/core/store/issue/workspace-draft/issue.store.ts b/apps/web/core/store/issue/workspace-draft/issue.store.ts index 48b017676bd..850a9e03e31 100644 --- a/apps/web/core/store/issue/workspace-draft/issue.store.ts +++ b/apps/web/core/store/issue/workspace-draft/issue.store.ts @@ -391,31 +391,39 @@ export class WorkspaceDraftIssues implements IWorkspaceDraftIssues { // dummies viewFlags: ViewFlags = { enableQuickAdd: false, enableIssueCreation: false, enableInlineEditing: false }; groupedIssueIds: TGroupedIssues | TSubGroupedIssues | undefined = undefined; - getIssueIds = (groupId?: string, subGroupId?: string) => undefined; - getPaginationData = (groupId: string | undefined, subGroupId: string | undefined) => undefined; - getIssueLoader = (groupId?: string, subGroupId?: string) => "loaded" as TLoader; - getGroupIssueCount = (groupId: string | undefined, subGroupId: string | undefined, isSubGroupCumulative: boolean) => - undefined; - removeCycleFromIssue = async (workspaceSlug: string, projectId: string, issueId: string) => {}; + getIssueIds = (_groupId?: string, _subGroupId?: string) => undefined; + getPaginationData = (_groupId: string | undefined, _subGroupId: string | undefined) => undefined; + getIssueLoader = (_groupId?: string, _subGroupId?: string) => "loaded" as TLoader; + getGroupIssueCount = ( + _groupId: string | undefined, + _subGroupId: string | undefined, + _isSubGroupCumulative: boolean + ) => undefined; + removeCycleFromIssue = async (_workspaceSlug: string, _projectId: string, _issueId: string) => {}; addIssueToCycle = async ( - workspaceSlug: string, - projectId: string, - cycleId: string, - issueIds: string[], - fetchAddedIssues?: boolean + _workspaceSlug: string, + _projectId: string, + _cycleId: string, + _issueIds: string[], + _fetchAddedIssues?: boolean ) => {}; - removeIssueFromCycle = async (workspaceSlug: string, projectId: string, cycleId: string, issueId: string) => {}; + removeIssueFromCycle = async (_workspaceSlug: string, _projectId: string, _cycleId: string, _issueId: string) => {}; - removeIssuesFromModule = async (workspaceSlug: string, projectId: string, moduleId: string, issueIds: string[]) => {}; + removeIssuesFromModule = async ( + _workspaceSlug: string, + _projectId: string, + _moduleId: string, + _issueIds: string[] + ) => {}; changeModulesInIssue = async ( - workspaceSlug: string, - projectId: string, - issueId: string, - addModuleIds: string[], - removeModuleIds: string[] + _workspaceSlug: string, + _projectId: string, + _issueId: string, + _addModuleIds: string[], + _removeModuleIds: string[] ) => {}; - archiveIssue = async (workspaceSlug: string, projectId: string, issueId: string) => {}; - archiveBulkIssues = async (workspaceSlug: string, projectId: string, issueIds: string[]) => {}; - removeBulkIssues = async (workspaceSlug: string, projectId: string, issueIds: string[]) => {}; - bulkUpdateProperties = async (workspaceSlug: string, projectId: string, data: TBulkOperationsPayload) => {}; + archiveIssue = async (_workspaceSlug: string, _projectId: string, _issueId: string) => {}; + archiveBulkIssues = async (_workspaceSlug: string, _projectId: string, _issueIds: string[]) => {}; + removeBulkIssues = async (_workspaceSlug: string, _projectId: string, _issueIds: string[]) => {}; + bulkUpdateProperties = async (_workspaceSlug: string, _projectId: string, _data: TBulkOperationsPayload) => {}; } diff --git a/apps/web/core/store/pages/project-page.store.ts b/apps/web/core/store/pages/project-page.store.ts index c84dad1b5d9..abb48ab9178 100644 --- a/apps/web/core/store/pages/project-page.store.ts +++ b/apps/web/core/store/pages/project-page.store.ts @@ -328,7 +328,7 @@ export class ProjectPageStore implements IProjectPageStore { * @description delete a page * @param {string} pageId */ - removePage = async ({ pageId, shouldSync = true }: { pageId: string; shouldSync?: boolean }) => { + removePage = async ({ pageId, shouldSync: _shouldSync = true }: { pageId: string; shouldSync?: boolean }) => { try { const { workspaceSlug, projectId } = this.store.router; if (!workspaceSlug || !projectId || !pageId) return undefined; diff --git a/apps/web/helpers/cover-image.helper.ts b/apps/web/helpers/cover-image.helper.ts index caac9df416f..6ef7b2854c5 100644 --- a/apps/web/helpers/cover-image.helper.ts +++ b/apps/web/helpers/cover-image.helper.ts @@ -84,7 +84,7 @@ export const DEFAULT_COVER_IMAGE_URL = STATIC_COVER_IMAGES.IMAGE_1; */ const STATIC_COVER_IMAGES_SET = new Set(Object.values(STATIC_COVER_IMAGES)); -export type TCoverImageType = "local_static" | "uploaded_asset"; +export type TCoverImageType = "local_static" | "uploaded_asset" | "unsplash"; export type TCoverImageResult = { needsUpload: boolean; @@ -114,6 +114,17 @@ export const getCoverImageType = (imageUrl: string): TCoverImageType => { // Check against the explicit set of static images if (isStaticCoverImage(imageUrl)) return "local_static"; + // Check if it's an Unsplash image by validating the hostname + try { + const url = new URL(imageUrl); + const hostname = url.hostname.toLowerCase(); + if (hostname === "unsplash.com" || hostname.endsWith(".unsplash.com")) { + return "unsplash"; + } + } catch { + // If URL parsing fails (e.g., relative path), fall through to other checks + } + if (imageUrl.startsWith("http")) return "uploaded_asset"; return "uploaded_asset"; @@ -136,7 +147,7 @@ export function getCoverImageDisplayURL( const imageType = getCoverImageType(imageUrl); - if (imageType === "local_static") { + if (imageType === "local_static" || imageType === "unsplash") { return imageUrl; } @@ -149,6 +160,7 @@ export function getCoverImageDisplayURL( /** * Analyzes cover image change and determines what action to take + * Merged with isUnsplashImage logic - now detects unsplash images as a separate type */ export const analyzeCoverImageChange = ( currentImage: string | null | undefined, @@ -164,10 +176,18 @@ export const analyzeCoverImageChange = ( }; } - const imageType = getCoverImageType(newImage ?? ""); + if (!newImage) { + return { + needsUpload: false, + imageType: "uploaded_asset", + shouldUpdate: true, + }; + } + + const imageType = getCoverImageType(newImage); return { - needsUpload: imageType === "local_static", + needsUpload: imageType === "local_static" || imageType === "unsplash", imageType, shouldUpdate: hasChanged, }; @@ -201,7 +221,7 @@ export const uploadCoverImage = async ( throw new Error("Invalid file type. Please select an image."); } - const fileName = imageUrl.split("/").pop() || "cover.jpg"; + const fileName = imageUrl.split("/").pop()?.split("?")[0] || "image.jpg"; const file = new File([blob], fileName, { type: blob.type }); // Upload based on context @@ -233,7 +253,6 @@ export const uploadCoverImage = async ( /** * Main utility to handle cover image changes with upload - * Returns the payload fields that should be updated */ export const handleCoverImageChange = async ( currentImage: string | null | undefined, @@ -244,46 +263,20 @@ export const handleCoverImageChange = async ( entityType: EFileAssetType; isUserAsset?: boolean; } -): Promise => { +): Promise => { const analysis = analyzeCoverImageChange(currentImage, newImage); + if (!analysis.shouldUpdate) return; - // No change detected - if (!analysis.shouldUpdate) { - return null; - } - - // Image removed if (!newImage) { - return { - cover_image: null, - cover_image_url: null, - cover_image_asset: null, - }; + return { cover_image: null, cover_image_url: null, cover_image_asset: null }; } - // Local static image - needs upload if (analysis.needsUpload) { - const uploadedUrl = await uploadCoverImage(newImage, uploadConfig); - - // For BOTH user assets AND project assets: - // The backend auto-links when entity_identifier is set correctly - // For project assets: auto-linked server-side, no payload needed - // For user assets: return URL for immediate UI feedback - - if (uploadConfig.isUserAsset) { - return { - cover_image: uploadedUrl, - }; - } else { - return null; - } + await uploadCoverImage(newImage, uploadConfig); + return; } - // External/uploaded asset (e.g., Unsplash URL, pre-uploaded asset) - // Return the URL to be saved in the backend - return { - cover_image: newImage, - }; + return { cover_image: newImage }; }; /** diff --git a/apps/web/package.json b/apps/web/package.json index 34cf4b00612..d84d9ff0f58 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -25,7 +25,6 @@ "@fontsource/ibm-plex-mono": "5.2.7", "@fontsource/material-symbols-rounded": "5.2.30", "@headlessui/react": "^1.7.19", - "@intercom/messenger-js-sdk": "^0.0.12", "@plane/constants": "workspace:*", "@plane/editor": "workspace:*", "@plane/hooks": "workspace:*", @@ -74,7 +73,6 @@ "uuid": "catalog:" }, "devDependencies": { - "@dotenvx/dotenvx": "catalog:", "@plane/tailwind-config": "workspace:*", "@plane/typescript-config": "workspace:*", "@react-router/dev": "catalog:", @@ -84,6 +82,7 @@ "@types/react": "catalog:", "@types/react-color": "^3.0.6", "@types/react-dom": "catalog:", + "dotenv": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "^5.1.4" diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index b80e3b65eee..f94ebce9d00 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import * as dotenv from "@dotenvx/dotenvx"; +import * as dotenv from "dotenv"; import { reactRouter } from "@react-router/dev/vite"; import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; diff --git a/deployments/aio/community/Dockerfile b/deployments/aio/community/Dockerfile index 47e1227d975..642c9bac6e9 100644 --- a/deployments/aio/community/Dockerfile +++ b/deployments/aio/community/Dockerfile @@ -6,12 +6,12 @@ FROM --platform=$BUILDPLATFORM tonistiigi/binfmt AS binfmt # ************************************************** FROM node:22-alpine AS node -FROM artifacts.plane.so/makeplane/plane-frontend:${PLANE_VERSION} AS web-img -FROM artifacts.plane.so/makeplane/plane-backend:${PLANE_VERSION} AS backend-img -FROM artifacts.plane.so/makeplane/plane-space:${PLANE_VERSION} AS space-img -FROM artifacts.plane.so/makeplane/plane-admin:${PLANE_VERSION} AS admin-img -FROM artifacts.plane.so/makeplane/plane-live:${PLANE_VERSION} AS live-img -FROM artifacts.plane.so/makeplane/plane-proxy:${PLANE_VERSION} AS proxy-img +FROM makeplane/plane-frontend:${PLANE_VERSION} AS web-img +FROM makeplane/plane-backend:${PLANE_VERSION} AS backend-img +FROM makeplane/plane-space:${PLANE_VERSION} AS space-img +FROM makeplane/plane-admin:${PLANE_VERSION} AS admin-img +FROM makeplane/plane-live:${PLANE_VERSION} AS live-img +FROM makeplane/plane-proxy:${PLANE_VERSION} AS proxy-img # ************************************************** # STAGE 1: Runner diff --git a/deployments/aio/community/README.md b/deployments/aio/community/README.md index 96aab6737d4..8e945a826de 100644 --- a/deployments/aio/community/README.md +++ b/deployments/aio/community/README.md @@ -59,7 +59,7 @@ docker run --name plane-aio --rm -it \ -e AWS_ACCESS_KEY_ID=your-access-key \ -e AWS_SECRET_ACCESS_KEY=your-secret-key \ -e AWS_S3_BUCKET_NAME=your-bucket \ - artifacts.plane.so/makeplane/plane-aio-community:latest + makeplane/plane-aio-community:latest ``` ### Example with IP Address @@ -78,7 +78,7 @@ docker run --name myaio --rm -it \ -e AWS_S3_BUCKET_NAME=plane-app \ -e AWS_S3_ENDPOINT_URL=http://${MYIP}:19000 \ -e FILE_SIZE_LIMIT=10485760 \ - artifacts.plane.so/makeplane/plane-aio-community:latest + makeplane/plane-aio-community:latest ``` ## Configuration Options diff --git a/deployments/aio/community/supervisor.conf b/deployments/aio/community/supervisor.conf index 33b12985e4b..4474ee3b5cb 100644 --- a/deployments/aio/community/supervisor.conf +++ b/deployments/aio/community/supervisor.conf @@ -18,8 +18,8 @@ priority=10 [program:space] -directory=/app/space/apps/space/build/server -command=sh -c "npx react-router-serve index.js" +directory=/app/space/apps/space +command=sh -c "npx react-router-serve ./build/server/index.js" autostart=true autorestart=true stdout_logfile=/app/logs/access/space.log diff --git a/deployments/cli/community/docker-compose.yml b/deployments/cli/community/docker-compose.yml index d4de33a749a..2ed44f03718 100644 --- a/deployments/cli/community/docker-compose.yml +++ b/deployments/cli/community/docker-compose.yml @@ -61,7 +61,7 @@ x-app-env: &app-env services: web: - image: artifacts.plane.so/makeplane/plane-frontend:${APP_RELEASE:-stable} + image: makeplane/plane-frontend:${APP_RELEASE:-stable} deploy: replicas: ${WEB_REPLICAS:-1} restart_policy: @@ -71,7 +71,7 @@ services: - worker space: - image: artifacts.plane.so/makeplane/plane-space:${APP_RELEASE:-stable} + image: makeplane/plane-space:${APP_RELEASE:-stable} deploy: replicas: ${SPACE_REPLICAS:-1} restart_policy: @@ -82,7 +82,7 @@ services: - web admin: - image: artifacts.plane.so/makeplane/plane-admin:${APP_RELEASE:-stable} + image: makeplane/plane-admin:${APP_RELEASE:-stable} deploy: replicas: ${ADMIN_REPLICAS:-1} restart_policy: @@ -92,7 +92,7 @@ services: - web live: - image: artifacts.plane.so/makeplane/plane-live:${APP_RELEASE:-stable} + image: makeplane/plane-live:${APP_RELEASE:-stable} environment: <<: [*live-env, *redis-env] deploy: @@ -104,7 +104,7 @@ services: - web api: - image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-stable} + image: makeplane/plane-backend:${APP_RELEASE:-stable} command: ./bin/docker-entrypoint-api.sh deploy: replicas: ${API_REPLICAS:-1} @@ -120,7 +120,7 @@ services: - plane-mq worker: - image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-stable} + image: makeplane/plane-backend:${APP_RELEASE:-stable} command: ./bin/docker-entrypoint-worker.sh deploy: replicas: ${WORKER_REPLICAS:-1} @@ -137,7 +137,7 @@ services: - plane-mq beat-worker: - image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-stable} + image: makeplane/plane-backend:${APP_RELEASE:-stable} command: ./bin/docker-entrypoint-beat.sh deploy: replicas: ${BEAT_WORKER_REPLICAS:-1} @@ -154,7 +154,7 @@ services: - plane-mq migrator: - image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-stable} + image: makeplane/plane-backend:${APP_RELEASE:-stable} command: ./bin/docker-entrypoint-migrator.sh deploy: replicas: 1 @@ -216,7 +216,7 @@ services: # Comment this if you already have a reverse proxy running proxy: - image: artifacts.plane.so/makeplane/plane-proxy:${APP_RELEASE:-stable} + image: makeplane/plane-proxy:${APP_RELEASE:-stable} deploy: replicas: 1 restart_policy: diff --git a/deployments/cli/community/install.sh b/deployments/cli/community/install.sh index 582aa839413..accd89c812d 100755 --- a/deployments/cli/community/install.sh +++ b/deployments/cli/community/install.sh @@ -5,7 +5,7 @@ SCRIPT_DIR=$PWD SERVICE_FOLDER=plane-app PLANE_INSTALL_DIR=$PWD/$SERVICE_FOLDER export APP_RELEASE=stable -export DOCKERHUB_USER=artifacts.plane.so/makeplane +export DOCKERHUB_USER=makeplane export PULL_POLICY=${PULL_POLICY:-if_not_present} export GH_REPO=makeplane/plane export RELEASE_DOWNLOAD_URL="https://github.com/$GH_REPO/releases/download" @@ -690,7 +690,7 @@ if [ -f "$DOCKER_ENV_PATH" ]; then CUSTOM_BUILD=$(getEnvValue "CUSTOM_BUILD" "$DOCKER_ENV_PATH") if [ -z "$DOCKERHUB_USER" ]; then - DOCKERHUB_USER=artifacts.plane.so/makeplane + DOCKERHUB_USER=makeplane updateEnvFile "DOCKERHUB_USER" "$DOCKERHUB_USER" "$DOCKER_ENV_PATH" fi diff --git a/deployments/swarm/community/swarm.sh b/deployments/swarm/community/swarm.sh index d496c25e6de..02f170f4d37 100755 --- a/deployments/swarm/community/swarm.sh +++ b/deployments/swarm/community/swarm.sh @@ -5,7 +5,7 @@ SERVICE_FOLDER=plane-app SCRIPT_DIR=$PWD PLANE_INSTALL_DIR=$PWD/$SERVICE_FOLDER export APP_RELEASE="stable" -export DOCKERHUB_USER=artifacts.plane.so/makeplane +export DOCKERHUB_USER=makeplane export GH_REPO=makeplane/plane export RELEASE_DOWNLOAD_URL="https://github.com/$GH_REPO/releases/download" @@ -595,7 +595,7 @@ if [ -f "$DOCKER_ENV_PATH" ]; then APP_RELEASE=$(getEnvValue "APP_RELEASE" "$DOCKER_ENV_PATH") if [ -z "$DOCKERHUB_USER" ]; then - DOCKERHUB_USER=artifacts.plane.so/makeplane + DOCKERHUB_USER=makeplane updateEnvFile "DOCKERHUB_USER" "$DOCKERHUB_USER" "$DOCKER_ENV_PATH" fi diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 5b7cba39e11..6bc5ee309f7 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -63,63 +63,6 @@ services: ports: - "5432:5432" - # web: - # build: - # context: . - # dockerfile: ./web/Dockerfile.dev - # restart: unless-stopped - # networks: - # - dev_env - # volumes: - # - ./web:/app/web - # env_file: - # - ./web/.env - # depends_on: - # - api - # - worker - - # space: - # build: - # context: . - # dockerfile: ./space/Dockerfile.dev - # restart: unless-stopped - # networks: - # - dev_env - # volumes: - # - ./space:/app/space - # depends_on: - # - api - # - worker - # - web - - # admin: - # build: - # context: . - # dockerfile: ./admin/Dockerfile.dev - # restart: unless-stopped - # networks: - # - dev_env - # volumes: - # - ./admin:/app/admin - # depends_on: - # - api - # - worker - # - web - - # live: - # build: - # context: . - # dockerfile: ./live/Dockerfile.dev - # restart: unless-stopped - # networks: - # - dev_env - # volumes: - # - ./live:/app/live - # depends_on: - # - api - # - worker - # - web - api: build: context: ./apps/api @@ -197,27 +140,6 @@ services: - plane-db - plane-redis - # proxy: - # build: - # context: ./apps/proxy - # dockerfile: Dockerfile.ce - # restart: unless-stopped - # networks: - # - dev_env - # ports: - # - ${LISTEN_HTTP_PORT}:80 - # - ${LISTEN_HTTPS_PORT}:443 - # env_file: - # - .env - # environment: - # FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880} - # BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads} - # depends_on: - # - api - # - web - # - space - # - admin - volumes: redisdata: uploads: diff --git a/package.json b/package.json index c2641f65045..7c0ce03f1e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plane", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Open-source project management that unlocks customer value", "license": "AGPL-3.0", @@ -24,7 +24,7 @@ "lint-staged": "16.2.7", "oxfmt": "0.35.0", "oxlint": "1.51.0", - "turbo": "2.8.12" + "turbo": "2.9.4" }, "lint-staged": { "*.{js,jsx,ts,tsx,cjs,mjs,cts,mts,json,css,md}": [ @@ -37,7 +37,7 @@ "engines": { "node": ">=22.18.0" }, - "packageManager": "pnpm@10.30.2+sha512.36cdc707e7b7940a988c9c1ecf88d084f8514b5c3f085f53a2e244c2921d3b2545bc20dd4ebe1fc245feec463bb298aecea7a63ed1f7680b877dc6379d8d0cb4", + "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", "pnpm": { "overrides": { "express": "catalog:", @@ -45,7 +45,7 @@ "valibot": "1.2.0", "glob": "11.1.0", "js-yaml": "4.1.1", - "brace-expansion": "2.0.2", + "brace-expansion": "5.0.5", "nanoid": "3.3.8", "esbuild": "0.25.0", "@babel/helpers": "7.26.10", @@ -62,16 +62,27 @@ "webpack": "5.104.1", "lodash-es": "catalog:", "@isaacs/brace-expansion": "5.0.1", - "lodash": "4.17.23", + "lodash": "4.18.1", "markdown-it": "14.1.1", "rollup": "4.59.0", "minimatch@3": "3.1.4", "minimatch@10": "10.2.3", - "serialize-javascript": "7.0.3", + "serialize-javascript": "7.0.5", "ajv@6": "6.14.0", - "ajv@8": "8.18.0" + "ajv@8": "8.18.0", + "undici@7": "7.24.0", + "flatted": "3.4.2", + "picomatch": "2.3.2", + "yaml@1": "1.10.3", + "yaml@2": "2.8.3", + "path-to-regexp": "0.1.13", + "defu": "6.1.5" }, "onlyBuiltDependencies": [ + "@parcel/watcher", + "@swc/core", + "esbuild", + "msgpackr-extract", "turbo" ], "ignoredBuiltDependencies": [ diff --git a/packages/codemods/package.json b/packages/codemods/package.json index e2bac61cd84..e335d735b68 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,6 +1,6 @@ { "name": "@plane/codemods", - "version": "1.2.0", + "version": "1.3.0", "private": true, "scripts": { "test": "vitest run", diff --git a/packages/constants/package.json b/packages/constants/package.json index 72739c9dba6..dabdd16129d 100644 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "@plane/constants", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -12,7 +12,7 @@ "./package.json": "./package.json" }, "scripts": { - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "build": "tsdown", "check:lint": "oxlint --max-warnings=2 .", "check:types": "tsc --noEmit", diff --git a/packages/decorators/package.json b/packages/decorators/package.json index c44db6f0b04..d643bcb1455 100644 --- a/packages/decorators/package.json +++ b/packages/decorators/package.json @@ -14,7 +14,7 @@ }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=3 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", @@ -30,5 +30,10 @@ "reflect-metadata": "^0.2.2", "tsdown": "catalog:", "typescript": "catalog:" + }, + "inlinedDependencies": { + "@types/express": "4.17.23", + "@types/express-serve-static-core": "4.19.6", + "reflect-metadata": "0.2.2" } } diff --git a/packages/editor/package.json b/packages/editor/package.json index 4828f01f095..9235ba0cbca 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -1,6 +1,6 @@ { "name": "@plane/editor", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Core Editor that powers Plane", "keywords": [ @@ -24,7 +24,7 @@ }, "scripts": { "build": "tsc && tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=416 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", diff --git a/packages/editor/src/core/components/editors/editor-container.tsx b/packages/editor/src/core/components/editors/editor-container.tsx index 1ab8de8d09b..b9631cbfbd0 100644 --- a/packages/editor/src/core/components/editors/editor-container.tsx +++ b/packages/editor/src/core/components/editors/editor-container.tsx @@ -6,7 +6,7 @@ import type { HocuspocusProvider } from "@hocuspocus/provider"; import type { Editor } from "@tiptap/react"; -import type { FC, ReactNode } from "react"; +import type { ReactNode } from "react"; import { useCallback, useEffect, useRef } from "react"; // plane utils import { cn } from "@plane/utils"; diff --git a/packages/editor/src/core/components/editors/link-view-container.tsx b/packages/editor/src/core/components/editors/link-view-container.tsx index 6fd3a61d0d5..9b07c63a73f 100644 --- a/packages/editor/src/core/components/editors/link-view-container.tsx +++ b/packages/editor/src/core/components/editors/link-view-container.tsx @@ -7,7 +7,6 @@ import { autoUpdate, flip, hide, shift, useDismiss, useFloating, useInteractions } from "@floating-ui/react"; import type { Editor } from "@tiptap/react"; import { useEditorState } from "@tiptap/react"; -import type { FC } from "react"; import { useCallback, useEffect, useRef, useState } from "react"; // components diff --git a/packages/editor/src/core/components/menus/block-menu.tsx b/packages/editor/src/core/components/menus/block-menu.tsx index 367f741b56d..c3dff0d20e9 100644 --- a/packages/editor/src/core/components/menus/block-menu.tsx +++ b/packages/editor/src/core/components/menus/block-menu.tsx @@ -42,7 +42,7 @@ export type BlockMenuOption = { }; export function BlockMenu(props: Props) { - const { editor, workItemIdentifier } = props; + const { editor } = props; const [isOpen, setIsOpen] = useState(false); const [isAnimatedIn, setIsAnimatedIn] = useState(false); const menuRef = useRef(null); diff --git a/packages/editor/src/core/components/menus/bubble-menu/color-selector.tsx b/packages/editor/src/core/components/menus/bubble-menu/color-selector.tsx index cc1c2a8bb36..d8151b8b61c 100644 --- a/packages/editor/src/core/components/menus/bubble-menu/color-selector.tsx +++ b/packages/editor/src/core/components/menus/bubble-menu/color-selector.tsx @@ -7,7 +7,6 @@ import type { Editor } from "@tiptap/react"; import { ALargeSmall, Ban } from "lucide-react"; import { useMemo } from "react"; -import type { FC } from "react"; // plane utils import { cn } from "@plane/utils"; // constants diff --git a/packages/editor/src/core/components/menus/bubble-menu/link-selector.tsx b/packages/editor/src/core/components/menus/bubble-menu/link-selector.tsx index 46491412433..0745059389d 100644 --- a/packages/editor/src/core/components/menus/bubble-menu/link-selector.tsx +++ b/packages/editor/src/core/components/menus/bubble-menu/link-selector.tsx @@ -6,7 +6,6 @@ import type { Editor } from "@tiptap/core"; -import type { FC } from "react"; import { useCallback, useRef, useState } from "react"; import { LinkIcon, TrashIcon, CheckIcon } from "@plane/propel/icons"; // plane imports diff --git a/packages/editor/src/core/components/menus/bubble-menu/node-selector.tsx b/packages/editor/src/core/components/menus/bubble-menu/node-selector.tsx index 20229ace53a..e31fe563591 100644 --- a/packages/editor/src/core/components/menus/bubble-menu/node-selector.tsx +++ b/packages/editor/src/core/components/menus/bubble-menu/node-selector.tsx @@ -6,7 +6,6 @@ import type { Editor } from "@tiptap/react"; -import type { FC } from "react"; import { CheckIcon, ChevronDownIcon } from "@plane/propel/icons"; // plane utils import { cn } from "@plane/utils"; diff --git a/packages/editor/src/core/components/menus/bubble-menu/root.tsx b/packages/editor/src/core/components/menus/bubble-menu/root.tsx index 8aa1d90a664..0173275142e 100644 --- a/packages/editor/src/core/components/menus/bubble-menu/root.tsx +++ b/packages/editor/src/core/components/menus/bubble-menu/root.tsx @@ -8,7 +8,6 @@ import { isNodeSelection } from "@tiptap/core"; import type { Editor } from "@tiptap/core"; import { BubbleMenu, useEditorState } from "@tiptap/react"; import type { BubbleMenuProps } from "@tiptap/react"; -import type { FC } from "react"; import { useEffect, useState, useRef } from "react"; // plane utils import { cn } from "@plane/utils"; diff --git a/packages/editor/src/core/extensions/custom-image/components/block.tsx b/packages/editor/src/core/extensions/custom-image/components/block.tsx index 4d6793a0793..acb3e260c06 100644 --- a/packages/editor/src/core/extensions/custom-image/components/block.tsx +++ b/packages/editor/src/core/extensions/custom-image/components/block.tsx @@ -252,7 +252,7 @@ export function CustomImageBlock(props: CustomImageBlockProps) { src={displayedImageSrc} alt="" onLoad={handleImageLoad} - onError={(e) => + onError={(_e) => void (async () => { // for old image extension this command doesn't exist or if the image failed to load for the first time if (!extension.options.restoreImage || hasTriedRestoringImageOnce) { diff --git a/packages/editor/src/core/hooks/use-collaborative-editor.ts b/packages/editor/src/core/hooks/use-collaborative-editor.ts index 70fc1ebd704..8815c668333 100644 --- a/packages/editor/src/core/hooks/use-collaborative-editor.ts +++ b/packages/editor/src/core/hooks/use-collaborative-editor.ts @@ -65,7 +65,6 @@ export const useCollaborativeEditor = (props: UseCollaborativeEditorArgs) => { titleRef, updatePageProperties, user, - actions, } = props; const { mainNavigationExtension, titleNavigationExtension, setMainEditor, setTitleEditor } = useEditorNavigation(); diff --git a/packages/editor/src/core/props.ts b/packages/editor/src/core/props.ts index 4eb4dad50ab..51f9b937a4f 100644 --- a/packages/editor/src/core/props.ts +++ b/packages/editor/src/core/props.ts @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import { DOMParser } from "@tiptap/pm/model"; import type { EditorProps } from "@tiptap/pm/view"; // plane utils import { cn } from "@plane/utils"; diff --git a/packages/editor/src/core/types/config.ts b/packages/editor/src/core/types/config.ts index 065e4177e1f..74fff4dfe01 100644 --- a/packages/editor/src/core/types/config.ts +++ b/packages/editor/src/core/types/config.ts @@ -5,7 +5,6 @@ */ // plane imports -import type { TWebhookConnectionQueryParams } from "@plane/types"; import type { TExtendedFileHandler } from "@/plane-editor/types/config"; export type TFileHandler = { diff --git a/packages/hooks/package.json b/packages/hooks/package.json index 98046927e5b..2a6076951ef 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -1,6 +1,6 @@ { "name": "@plane/hooks", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "React hooks that are shared across multiple apps internally", "license": "AGPL-3.0", @@ -9,15 +9,12 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=4 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", diff --git a/packages/hooks/tsdown.config.ts b/packages/hooks/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/hooks/tsdown.config.ts +++ b/packages/hooks/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 2fffd83d0d9..5fd80fca39d 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@plane/i18n", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "I18n shared across multiple apps internally", "license": "AGPL-3.0", @@ -9,14 +9,11 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "build": "tsdown", "check:lint": "oxlint --max-warnings=2 .", "check:types": "tsc --noEmit", diff --git a/packages/i18n/src/locales/cs/translations.ts b/packages/i18n/src/locales/cs/translations.ts index 8a0aded99bd..d2a818f3b89 100644 --- a/packages/i18n/src/locales/cs/translations.ts +++ b/packages/i18n/src/locales/cs/translations.ts @@ -395,7 +395,6 @@ export default { time_tracking_description: "Zaznamenávejte čas strávený na pracovních položkách a projektech.", work_management_description: "Spravujte svou práci a projekty snadno.", documentation: "Dokumentace", - message_support: "Kontaktovat podporu", contact_sales: "Kontaktovat prodej", hyper_mode: "Hyper režim", keyboard_shortcuts: "Klávesové zkratky", diff --git a/packages/i18n/src/locales/de/translations.ts b/packages/i18n/src/locales/de/translations.ts index 2d54b10b85a..db4925f1f92 100644 --- a/packages/i18n/src/locales/de/translations.ts +++ b/packages/i18n/src/locales/de/translations.ts @@ -406,7 +406,6 @@ export default { time_tracking_description: "Erfassen Sie die auf Arbeitselemente und Projekte verwendete Zeit.", work_management_description: "Verwalten Sie Ihre Arbeit und Projekte mühelos.", documentation: "Dokumentation", - message_support: "Support kontaktieren", contact_sales: "Vertrieb kontaktieren", hyper_mode: "Hyper-Modus", keyboard_shortcuts: "Tastaturkürzel", diff --git a/packages/i18n/src/locales/en/translations.ts b/packages/i18n/src/locales/en/translations.ts index 9f3eff04d1a..2885fd3f0a1 100644 --- a/packages/i18n/src/locales/en/translations.ts +++ b/packages/i18n/src/locales/en/translations.ts @@ -229,7 +229,6 @@ export default { time_tracking_description: "Log time spent on work items and projects.", work_management_description: "Manage your work and projects with ease.", documentation: "Documentation", - message_support: "Message support", contact_sales: "Contact sales", hyper_mode: "Hyper Mode", keyboard_shortcuts: "Keyboard shortcuts", @@ -2697,7 +2696,6 @@ export default { open_plane_documentation: "Open Plane documentation", join_forum: "Join our Forum", report_bug: "Report a bug", - chat_with_us: "Chat with us", }, page_placeholders: { default: "Type a command or search", diff --git a/packages/i18n/src/locales/es/translations.ts b/packages/i18n/src/locales/es/translations.ts index 0d25038f17b..5ed015d06ca 100644 --- a/packages/i18n/src/locales/es/translations.ts +++ b/packages/i18n/src/locales/es/translations.ts @@ -406,7 +406,6 @@ export default { time_tracking_description: "Registra el tiempo dedicado a elementos de trabajo y proyectos.", work_management_description: "Gestiona tu trabajo y proyectos con facilidad.", documentation: "Documentación", - message_support: "Mensaje al soporte", contact_sales: "Contactar ventas", hyper_mode: "Modo Hyper", keyboard_shortcuts: "Atajos de teclado", diff --git a/packages/i18n/src/locales/fr/translations.ts b/packages/i18n/src/locales/fr/translations.ts index 38ef528359e..f7ace4c6914 100644 --- a/packages/i18n/src/locales/fr/translations.ts +++ b/packages/i18n/src/locales/fr/translations.ts @@ -402,7 +402,6 @@ export default { time_tracking_description: "Enregistrez le temps passé sur les éléments de travail et les projets.", work_management_description: "Gérez votre travail et vos projets facilement.", documentation: "Documentation", - message_support: "Contacter le support", contact_sales: "Contacter les ventes", hyper_mode: "Mode Hyper", keyboard_shortcuts: "Raccourcis clavier", diff --git a/packages/i18n/src/locales/id/translations.ts b/packages/i18n/src/locales/id/translations.ts index dfe4e198dd3..f933b215e04 100644 --- a/packages/i18n/src/locales/id/translations.ts +++ b/packages/i18n/src/locales/id/translations.ts @@ -398,7 +398,6 @@ export default { time_tracking_description: "Catat waktu yang dihabiskan untuk item kerja dan proyek.", work_management_description: "Kelola pekerjaan dan proyek Anda dengan mudah.", documentation: "Dokumentasi", - message_support: "Pesan dukungan", contact_sales: "Hubungi penjualan", hyper_mode: "Mode Hyper", keyboard_shortcuts: "Pintasan keyboard", diff --git a/packages/i18n/src/locales/it/translations.ts b/packages/i18n/src/locales/it/translations.ts index 247a0edee38..a0cb1b5c54f 100644 --- a/packages/i18n/src/locales/it/translations.ts +++ b/packages/i18n/src/locales/it/translations.ts @@ -400,7 +400,6 @@ export default { time_tracking_description: "Registra il tempo trascorso su elementi di lavoro e progetti.", work_management_description: "Gestisci il tuo lavoro e i tuoi progetti con facilità.", documentation: "Documentazione", - message_support: "Contatta il supporto", contact_sales: "Contatta le vendite", hyper_mode: "Modalità Hyper", keyboard_shortcuts: "Scorciatoie da tastiera", diff --git a/packages/i18n/src/locales/ja/translations.ts b/packages/i18n/src/locales/ja/translations.ts index 513d5e13293..6d79979904e 100644 --- a/packages/i18n/src/locales/ja/translations.ts +++ b/packages/i18n/src/locales/ja/translations.ts @@ -395,7 +395,6 @@ export default { time_tracking_description: "作業項目やプロジェクトに費やした時間を記録します。", work_management_description: "作業とプロジェクトを簡単に管理します。", documentation: "ドキュメント", - message_support: "サポートにメッセージ", contact_sales: "営業に問い合わせ", hyper_mode: "Hyper Mode", keyboard_shortcuts: "キーボードショートカット", diff --git a/packages/i18n/src/locales/ko/translations.ts b/packages/i18n/src/locales/ko/translations.ts index 5f86903d6ba..cf7e68d36a2 100644 --- a/packages/i18n/src/locales/ko/translations.ts +++ b/packages/i18n/src/locales/ko/translations.ts @@ -390,7 +390,6 @@ export default { time_tracking_description: "작업 항목 및 프로젝트에 소요된 시간을 기록하세요.", work_management_description: "작업 및 프로젝트를 쉽게 관리합니다.", documentation: "문서", - message_support: "지원 메시지", contact_sales: "영업 문의", hyper_mode: "하이퍼 모드", keyboard_shortcuts: "키보드 단축키", diff --git a/packages/i18n/src/locales/pl/translations.ts b/packages/i18n/src/locales/pl/translations.ts index fab1b96e85e..225859e9635 100644 --- a/packages/i18n/src/locales/pl/translations.ts +++ b/packages/i18n/src/locales/pl/translations.ts @@ -393,7 +393,6 @@ export default { time_tracking_description: "Rejestruj czas spędzony na elementach pracy i projektach.", work_management_description: "Łatwo zarządzaj swoją pracą i projektami.", documentation: "Dokumentacja", - message_support: "Skontaktuj się z pomocą", contact_sales: "Skontaktuj się z działem sprzedaży", hyper_mode: "Tryb Hyper", keyboard_shortcuts: "Skróty klawiaturowe", diff --git a/packages/i18n/src/locales/pt-BR/translations.ts b/packages/i18n/src/locales/pt-BR/translations.ts index 31b17890e0a..5282692a17b 100644 --- a/packages/i18n/src/locales/pt-BR/translations.ts +++ b/packages/i18n/src/locales/pt-BR/translations.ts @@ -402,7 +402,6 @@ export default { time_tracking_description: "Registre o tempo gasto em itens de trabalho e projetos.", work_management_description: "Gerencie seu trabalho e projetos com facilidade.", documentation: "Documentação", - message_support: "Suporte por mensagem", contact_sales: "Contatar vendas", hyper_mode: "Modo Hyper", keyboard_shortcuts: "Atalhos do teclado", diff --git a/packages/i18n/src/locales/ro/translations.ts b/packages/i18n/src/locales/ro/translations.ts index be20aa144fd..09a3312b6c8 100644 --- a/packages/i18n/src/locales/ro/translations.ts +++ b/packages/i18n/src/locales/ro/translations.ts @@ -399,7 +399,6 @@ export default { time_tracking_description: "Înregistrează timpul petrecut pe activități și proiecte.", work_management_description: "Gestionează-ți munca și proiectele cu ușurință.", documentation: "Documentație", - message_support: "Trimite mesaj la suport", contact_sales: "Contactează vânzările", hyper_mode: "Mod Hyper", keyboard_shortcuts: "Scurtături tastatură", diff --git a/packages/i18n/src/locales/ru/translations.ts b/packages/i18n/src/locales/ru/translations.ts index cbaa0081d00..52024d06cd1 100644 --- a/packages/i18n/src/locales/ru/translations.ts +++ b/packages/i18n/src/locales/ru/translations.ts @@ -402,7 +402,6 @@ export default { time_tracking_description: "Записывайте время, потраченное на рабочие элементы и проекты.", work_management_description: "Управление рабочими элементами и проектами", documentation: "Документация", - message_support: "Написать в поддержку", contact_sales: "Связаться с отделом продаж", hyper_mode: "Гиперрежим", keyboard_shortcuts: "Горячие клавиши", @@ -2869,7 +2868,6 @@ export default { open_plane_documentation: "Открыть документацию Plane", join_forum: "Присоединиться к Forum", report_bug: "Сообщить об ошибке", - chat_with_us: "Написать нам", }, page_placeholders: { default: "Введите команду или поиск", diff --git a/packages/i18n/src/locales/sk/translations.ts b/packages/i18n/src/locales/sk/translations.ts index 9d9343d0030..9a0c42e8e9e 100644 --- a/packages/i18n/src/locales/sk/translations.ts +++ b/packages/i18n/src/locales/sk/translations.ts @@ -395,7 +395,6 @@ export default { time_tracking_description: "Zaznamenajte čas strávený na pracovných položkách a projektoch.", work_management_description: "Spravujte svoju prácu a projekty jednoducho.", documentation: "Dokumentácia", - message_support: "Kontaktovať podporu", contact_sales: "Kontaktovať predaj", hyper_mode: "Hyper režim", keyboard_shortcuts: "Klávesové skratky", diff --git a/packages/i18n/src/locales/tr-TR/translations.ts b/packages/i18n/src/locales/tr-TR/translations.ts index 4b1240fba44..4e60e0cfbec 100644 --- a/packages/i18n/src/locales/tr-TR/translations.ts +++ b/packages/i18n/src/locales/tr-TR/translations.ts @@ -396,7 +396,6 @@ export default { time_tracking_description: "İş öğeleri ve projelerde harcanan zamanı kaydedin.", work_management_description: "İşlerinizi ve projelerinizi kolayca yönetin.", documentation: "Dokümantasyon", - message_support: "Destekle iletişim", contact_sales: "Satış Ekibiyle İletişim", hyper_mode: "Hiper Mod", keyboard_shortcuts: "Klavye Kısayolları", diff --git a/packages/i18n/src/locales/ua/translations.ts b/packages/i18n/src/locales/ua/translations.ts index 1da89e4a65d..0c949cf0567 100644 --- a/packages/i18n/src/locales/ua/translations.ts +++ b/packages/i18n/src/locales/ua/translations.ts @@ -402,7 +402,6 @@ export default { time_tracking_description: "Фіксуйте час, витрачений на робочі одиниці та проєкти.", work_management_description: "Зручно керуйте своєю роботою та проєктами.", documentation: "Документація", - message_support: "Звернутися в підтримку", contact_sales: "Зв’язатися з відділом продажів", hyper_mode: "Гіпер-режим", keyboard_shortcuts: "Гарячі клавіші", @@ -2861,7 +2860,6 @@ export default { open_plane_documentation: "Відкрити документацію Plane", join_forum: "Приєднатися до Forum", report_bug: "Повідомити про помилку", - chat_with_us: "Написати нам", }, page_placeholders: { default: "Введіть команду або виконайте пошук", diff --git a/packages/i18n/src/locales/vi-VN/translations.ts b/packages/i18n/src/locales/vi-VN/translations.ts index 62036fbe8ca..0cc12c75ea0 100644 --- a/packages/i18n/src/locales/vi-VN/translations.ts +++ b/packages/i18n/src/locales/vi-VN/translations.ts @@ -399,7 +399,6 @@ export default { time_tracking_description: "Ghi lại thời gian dành cho các mục công việc và dự án.", work_management_description: "Quản lý công việc và dự án của bạn một cách dễ dàng.", documentation: "Tài liệu", - message_support: "Liên hệ hỗ trợ", contact_sales: "Liên hệ bộ phận bán hàng", hyper_mode: "Chế độ siêu tốc", keyboard_shortcuts: "Phím tắt", diff --git a/packages/i18n/src/locales/zh-CN/translations.ts b/packages/i18n/src/locales/zh-CN/translations.ts index 9963936a36e..585ae13aa68 100644 --- a/packages/i18n/src/locales/zh-CN/translations.ts +++ b/packages/i18n/src/locales/zh-CN/translations.ts @@ -385,7 +385,6 @@ export default { time_tracking_description: "记录在工作项和项目上花费的时间。", work_management_description: "轻松管理您的工作和项目。", documentation: "文档", - message_support: "联系支持", contact_sales: "联系销售", hyper_mode: "超级模式", keyboard_shortcuts: "键盘快捷键", diff --git a/packages/i18n/src/locales/zh-TW/translations.ts b/packages/i18n/src/locales/zh-TW/translations.ts index e65359c4867..1fcf528fb1d 100644 --- a/packages/i18n/src/locales/zh-TW/translations.ts +++ b/packages/i18n/src/locales/zh-TW/translations.ts @@ -384,7 +384,6 @@ export default { time_tracking_description: "記錄在工作事項和專案上花費的時間。", work_management_description: "輕鬆管理您的工作和專案。", documentation: "文件", - message_support: "聯絡支援", contact_sales: "聯絡業務", hyper_mode: "極速模式", keyboard_shortcuts: "鍵盤快速鍵", diff --git a/packages/i18n/tsdown.config.ts b/packages/i18n/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/i18n/tsdown.config.ts +++ b/packages/i18n/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/packages/logger/package.json b/packages/logger/package.json index 09ccb35cf7e..82a149c6d70 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@plane/logger", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Logger shared across multiple apps internally", "license": "AGPL-3.0", @@ -14,7 +14,7 @@ }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=0 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", @@ -32,5 +32,9 @@ "@types/node": "catalog:", "tsdown": "catalog:", "typescript": "catalog:" + }, + "inlinedDependencies": { + "@types/express": "4.17.23", + "@types/express-serve-static-core": "4.19.6" } } diff --git a/packages/propel/package.json b/packages/propel/package.json index be5deb6de77..fd0c162ef9f 100644 --- a/packages/propel/package.json +++ b/packages/propel/package.json @@ -1,6 +1,6 @@ { "name": "@plane/propel", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -50,7 +50,7 @@ "./styles/react-day-picker": "./dist/styles/react-day-picker.css" }, "scripts": { - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "build": "tsdown", "check:lint": "oxlint --max-warnings=3605 .", "check:types": "tsc --noEmit", diff --git a/packages/propel/src/button/helper.tsx b/packages/propel/src/button/helper.tsx index 9e332d55f0b..18130b113c9 100644 --- a/packages/propel/src/button/helper.tsx +++ b/packages/propel/src/button/helper.tsx @@ -17,9 +17,9 @@ export const buttonVariants = cva( "error-fill": "bg-danger-primary text-on-color hover:bg-danger-primary-hover active:bg-danger-primary-active disabled:bg-layer-disabled disabled:text-disabled", "error-outline": - "bg-layer-2 hover:bg-danger-subtle active:bg-danger-subtle-hover disabled:bg-layer-2 text-danger-secondary disabled:text-disabled border border-danger-strong disabled:border-subtle-1", + "border border-danger-strong bg-layer-2 text-danger-secondary hover:bg-danger-subtle active:bg-danger-subtle-hover disabled:border-subtle-1 disabled:bg-layer-2 disabled:text-disabled", secondary: - "bg-layer-2 hover:bg-layer-2-hover active:bg-layer-2-active disabled:bg-layer-transparent text-secondary disabled:text-disabled border border-strong disabled:border-subtle-1 shadow-raised-100", + "border border-strong bg-layer-2 text-secondary shadow-raised-100 hover:bg-layer-2-hover active:bg-layer-2-active disabled:border-subtle-1 disabled:bg-layer-transparent disabled:text-disabled", tertiary: "bg-layer-3 text-secondary hover:bg-layer-3-hover active:bg-layer-3-active disabled:bg-layer-transparent disabled:text-disabled", ghost: diff --git a/packages/propel/src/icons/misc/check-circle-filled-icon.tsx b/packages/propel/src/icons/misc/check-circle-filled-icon.tsx new file mode 100644 index 00000000000..c0227cbc38a --- /dev/null +++ b/packages/propel/src/icons/misc/check-circle-filled-icon.tsx @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2023-present Plane Software, Inc. and contributors + * SPDX-License-Identifier: AGPL-3.0-only + * See the LICENSE file for details. + */ + +import * as React from "react"; + +import { IconWrapper } from "../icon-wrapper"; +import type { ISvgIcons } from "../type"; + +export const CheckCircleFilledIcon: React.FC = ({ color = "currentColor", ...rest }) => { + const clipPathId = React.useId(); + + return ( + + + + ); +}; diff --git a/packages/propel/src/icons/misc/close-circle-filled-icon.tsx b/packages/propel/src/icons/misc/close-circle-filled-icon.tsx new file mode 100644 index 00000000000..2b927d62ced --- /dev/null +++ b/packages/propel/src/icons/misc/close-circle-filled-icon.tsx @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2023-present Plane Software, Inc. and contributors + * SPDX-License-Identifier: AGPL-3.0-only + * See the LICENSE file for details. + */ + +import * as React from "react"; + +import { IconWrapper } from "../icon-wrapper"; +import type { ISvgIcons } from "../type"; + +export const CloseCircleFilledIcon: React.FC = ({ color = "currentColor", ...rest }) => { + const clipPathId = React.useId(); + + return ( + + + + ); +}; diff --git a/packages/propel/src/icons/misc/index.ts b/packages/propel/src/icons/misc/index.ts index fc387e1d171..34716ecbe6e 100644 --- a/packages/propel/src/icons/misc/index.ts +++ b/packages/propel/src/icons/misc/index.ts @@ -4,4 +4,6 @@ * See the LICENSE file for details. */ +export * from "./check-circle-filled-icon"; +export * from "./close-circle-filled-icon"; export * from "./info-icon"; diff --git a/packages/propel/src/tab-navigation/tab-navigation-list.tsx b/packages/propel/src/tab-navigation/tab-navigation-list.tsx index aa3f5793900..d4a7c98f060 100644 --- a/packages/propel/src/tab-navigation/tab-navigation-list.tsx +++ b/packages/propel/src/tab-navigation/tab-navigation-list.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import { LayoutGroup } from "framer-motion"; import { cn } from "../utils"; import type { TTabNavigationListProps } from "./tab-navigation-types"; diff --git a/packages/services/package.json b/packages/services/package.json index e417a36e068..e4590d17958 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -1,6 +1,6 @@ { "name": "@plane/services", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -8,15 +8,12 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index-BliaS-AT.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=6 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", @@ -28,7 +25,7 @@ "@plane/constants": "workspace:*", "@plane/types": "workspace:*", "axios": "catalog:", - "file-type": "^21.0.0" + "file-type": "^21.3.1" }, "devDependencies": { "@plane/typescript-config": "workspace:*", diff --git a/packages/services/tsdown.config.ts b/packages/services/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/services/tsdown.config.ts +++ b/packages/services/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/packages/shared-state/package.json b/packages/shared-state/package.json index 0505c8e6655..87a2df2ab43 100644 --- a/packages/shared-state/package.json +++ b/packages/shared-state/package.json @@ -1,6 +1,6 @@ { "name": "@plane/shared-state", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Shared state shared across multiple apps internally", "license": "AGPL-3.0", @@ -9,15 +9,12 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=0 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", diff --git a/packages/shared-state/tsdown.config.ts b/packages/shared-state/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/shared-state/tsdown.config.ts +++ b/packages/shared-state/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json index a3b57b18d5f..80ab13ff008 100644 --- a/packages/tailwind-config/package.json +++ b/packages/tailwind-config/package.json @@ -1,20 +1,22 @@ { "name": "@plane/tailwind-config", - "version": "1.2.0", - "license": "AGPL-3.0", - "description": "common tailwind configuration across monorepo", - "main": "tailwind.config.js", + "version": "1.3.0", "private": true, + "description": "common tailwind configuration across monorepo", + "license": "AGPL-3.0", "sideEffects": [ "**/*.css" ], - "devDependencies": { - "@tailwindcss/postcss": "4.1.17", - "postcss": "8.5.6", - "tailwindcss": "4.1.17" - }, + "main": "tailwind.config.js", "exports": { "./index.css": "./index.css", "./postcss.config.js": "./postcss.config.js" + }, + "dependencies": { + "@tailwindcss/postcss": "4.1.17", + "postcss": "8.5.6" + }, + "devDependencies": { + "tailwindcss": "4.1.17" } } diff --git a/packages/types/package.json b/packages/types/package.json index eba34790a49..4ce05a2c7ea 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@plane/types", - "version": "1.2.0", + "version": "1.3.0", "private": true, "license": "AGPL-3.0", "type": "module", @@ -12,7 +12,7 @@ "./package.json": "./package.json" }, "scripts": { - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "build": "tsdown", "check:lint": "oxlint --max-warnings=1 .", "check:types": "tsc --noEmit", diff --git a/packages/types/src/instance/base.ts b/packages/types/src/instance/base.ts index 431b09ac0f3..a93baef524f 100644 --- a/packages/types/src/instance/base.ts +++ b/packages/types/src/instance/base.ts @@ -65,9 +65,6 @@ export interface IInstanceConfig { space_base_url: string | undefined; admin_base_url: string | undefined; is_self_managed: boolean; - // intercom - is_intercom_enabled: boolean; - intercom_app_id: string | undefined; instance_changelog_url?: string; } @@ -83,14 +80,11 @@ export interface IInstanceAdmin { user_detail: IUserLite; } -export type TInstanceIntercomConfigurationKeys = "IS_INTERCOM_ENABLED" | "INTERCOM_APP_ID"; - export type TInstanceConfigurationKeys = | TInstanceAIConfigurationKeys | TInstanceEmailConfigurationKeys | TInstanceImageConfigurationKeys | TInstanceAuthenticationKeys - | TInstanceIntercomConfigurationKeys | TInstanceWorkspaceConfigurationKeys; export interface IInstanceConfiguration { diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index c8d21d9ae5f..4fc7797f587 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,8 +1,8 @@ { "name": "@plane/typescript-config", - "version": "1.2.0", - "license": "AGPL-3.0", + "version": "1.3.0", "private": true, + "license": "AGPL-3.0", "files": [ "base.json", "nextjs.json", diff --git a/packages/ui/package.json b/packages/ui/package.json index ddad8157970..5801ff7052f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@plane/ui", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "UI components shared across multiple apps internally", "license": "AGPL-3.0", @@ -10,15 +10,12 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "postcss": "postcss styles/globals.css -o styles/output.css --watch", diff --git a/packages/ui/src/collapsible/collapsible-button.tsx b/packages/ui/src/collapsible/collapsible-button.tsx index 780087cbe6c..c2bb54c86ed 100644 --- a/packages/ui/src/collapsible/collapsible-button.tsx +++ b/packages/ui/src/collapsible/collapsible-button.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; import type { ISvgIcons } from "@plane/propel/icons"; import { DropdownIcon } from "@plane/propel/icons"; diff --git a/packages/ui/src/dropdown/common/options.tsx b/packages/ui/src/dropdown/common/options.tsx index d37a2ea1ebd..fb8a1e55fba 100644 --- a/packages/ui/src/dropdown/common/options.tsx +++ b/packages/ui/src/dropdown/common/options.tsx @@ -28,7 +28,6 @@ export function DropdownOptions(props: IMultiSelectDropdownOptions | ISingleSele keyExtractor, options, handleClose, - value, renderItem, loader, isMobile = false, diff --git a/packages/ui/src/dropdown/multi-select.tsx b/packages/ui/src/dropdown/multi-select.tsx index d7a9cf221d2..ba3f3ea242f 100644 --- a/packages/ui/src/dropdown/multi-select.tsx +++ b/packages/ui/src/dropdown/multi-select.tsx @@ -6,7 +6,6 @@ import { Combobox } from "@headlessui/react"; import { sortBy } from "lodash-es"; -import type { FC } from "react"; import React, { useMemo, useRef, useState } from "react"; import { usePopper } from "react-popper"; // plane imports diff --git a/packages/ui/src/dropdown/single-select.tsx b/packages/ui/src/dropdown/single-select.tsx index cb960c92497..4c16c4c69d1 100644 --- a/packages/ui/src/dropdown/single-select.tsx +++ b/packages/ui/src/dropdown/single-select.tsx @@ -6,7 +6,6 @@ import { Combobox } from "@headlessui/react"; import { sortBy } from "lodash-es"; -import type { FC } from "react"; import React, { useMemo, useRef, useState } from "react"; import { usePopper } from "react-popper"; // plane imports diff --git a/packages/ui/src/link/block.tsx b/packages/ui/src/link/block.tsx index 1398b4adc73..6d50522f86e 100644 --- a/packages/ui/src/link/block.tsx +++ b/packages/ui/src/link/block.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React from "react"; // plane utils import { calculateTimeAgo, cn, getIconForLink } from "@plane/utils"; diff --git a/packages/ui/src/progress/circular-progress-indicator.tsx b/packages/ui/src/progress/circular-progress-indicator.tsx index a2874793645..b679522322b 100644 --- a/packages/ui/src/progress/circular-progress-indicator.tsx +++ b/packages/ui/src/progress/circular-progress-indicator.tsx @@ -15,7 +15,7 @@ interface ICircularProgressIndicator { } export function CircularProgressIndicator(props: ICircularProgressIndicator) { - const { size = 40, percentage = 25, strokeWidth = 6, strokeColor = "stroke-success", children } = props; + const { size = 40, percentage = 25, strokeWidth = 6, strokeColor = "stroke-success-secondary", children } = props; const sqSize = size; const radius = (size - strokeWidth) / 2; diff --git a/packages/ui/src/progress/radial-progress.tsx b/packages/ui/src/progress/radial-progress.tsx index 2addbe11160..5f8ebb37d4f 100644 --- a/packages/ui/src/progress/radial-progress.tsx +++ b/packages/ui/src/progress/radial-progress.tsx @@ -4,7 +4,6 @@ * See the LICENSE file for details. */ -import type { FC } from "react"; import React, { useState, useEffect } from "react"; interface IRadialProgressBar { diff --git a/packages/ui/src/scroll-area.tsx b/packages/ui/src/scroll-area.tsx index 76791d9fba3..4ce2a1edba1 100644 --- a/packages/ui/src/scroll-area.tsx +++ b/packages/ui/src/scroll-area.tsx @@ -5,7 +5,6 @@ */ import * as RadixScrollArea from "@radix-ui/react-scroll-area"; -import type { FC } from "react"; import React from "react"; import { cn } from "./utils"; diff --git a/packages/ui/src/tabs/tabs.tsx b/packages/ui/src/tabs/tabs.tsx index 009f022830e..ccd2337522a 100644 --- a/packages/ui/src/tabs/tabs.tsx +++ b/packages/ui/src/tabs/tabs.tsx @@ -5,7 +5,6 @@ */ import { Tab } from "@headlessui/react"; -import type { FC } from "react"; import React, { Fragment, useEffect, useState } from "react"; // helpers import { useLocalStorage } from "@plane/hooks"; diff --git a/packages/ui/tsdown.config.ts b/packages/ui/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/ui/tsdown.config.ts +++ b/packages/ui/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/packages/utils/package.json b/packages/utils/package.json index f033f08d455..712c0a3cfa0 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@plane/utils", - "version": "1.2.0", + "version": "1.3.0", "private": true, "description": "Helper functions shared across multiple apps internally", "license": "AGPL-3.0", @@ -9,15 +9,12 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, + ".": "./dist/index.js", "./package.json": "./package.json" }, "scripts": { "build": "tsdown", - "dev": "tsdown --watch", + "dev": "tsdown --watch --no-clean", "check:lint": "oxlint --max-warnings=38 .", "check:types": "tsc --noEmit", "check:format": "oxfmt --check .", diff --git a/packages/utils/src/url.ts b/packages/utils/src/url.ts index 29268a156fc..522a626297c 100644 --- a/packages/utils/src/url.ts +++ b/packages/utils/src/url.ts @@ -261,7 +261,7 @@ export function extractURLComponents(url: URL | string): IURLComponents | undefi } return undefined; - } catch (error) { + } catch (_error) { return undefined; } } @@ -323,7 +323,7 @@ export function isValidNextPath(url: string): boolean { ]; return !maliciousPatterns.some((pattern) => pattern.test(pathname)); - } catch (error) { + } catch (_error) { // If URL constructor fails, it's an invalid path return false; } diff --git a/packages/utils/tsdown.config.ts b/packages/utils/tsdown.config.ts index 78c3dcba86b..92959eaf716 100644 --- a/packages/utils/tsdown.config.ts +++ b/packages/utils/tsdown.config.ts @@ -5,4 +5,5 @@ export default defineConfig({ format: ["esm"], dts: true, platform: "neutral", + exports: true, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e40e081b1f2..e0f2e9aa297 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,9 +18,6 @@ catalogs: '@bprogress/core': specifier: ^1.3.4 version: 1.3.4 - '@dotenvx/dotenvx': - specifier: 1.51.1 - version: 1.51.1 '@react-router/dev': specifier: 7.13.1 version: 7.13.1 @@ -49,8 +46,11 @@ catalogs: specifier: 18.3.1 version: 18.3.1 axios: - specifier: 1.13.5 - version: 1.13.5 + specifier: 1.15.0 + version: 1.15.0 + dotenv: + specifier: 16.4.7 + version: 16.4.7 lucide-react: specifier: 0.469.0 version: 0.469.0 @@ -88,7 +88,7 @@ overrides: valibot: 1.2.0 glob: 11.1.0 js-yaml: 4.1.1 - brace-expansion: 2.0.2 + brace-expansion: 5.0.5 nanoid: 3.3.8 esbuild: 0.25.0 '@babel/helpers': 7.26.10 @@ -99,20 +99,27 @@ overrides: prosemirror-view: 1.40.0 '@types/express': 4.17.23 typescript: 5.8.3 - vite: 7.3.1 + vite: 7.3.2 qs: 6.14.2 diff: 5.2.2 webpack: 5.104.1 - lodash-es: 4.17.23 + lodash-es: 4.18.0 '@isaacs/brace-expansion': 5.0.1 - lodash: 4.17.23 + lodash: 4.18.1 markdown-it: 14.1.1 rollup: 4.59.0 minimatch@3: 3.1.4 minimatch@10: 10.2.3 - serialize-javascript: 7.0.3 + serialize-javascript: 7.0.5 ajv@6: 6.14.0 ajv@8: 8.18.0 + undici@7: 7.24.0 + flatted: 3.4.2 + picomatch: 2.3.2 + yaml@1: 1.10.3 + yaml@2: 2.8.3 + path-to-regexp: 0.1.13 + defu: 6.1.5 importers: @@ -131,8 +138,8 @@ importers: specifier: 1.51.0 version: 1.51.0 turbo: - specifier: 2.8.12 - version: 2.8.12 + specifier: 2.9.4 + version: 2.9.4 apps/admin: dependencies: @@ -183,13 +190,13 @@ importers: version: 3.13.12 axios: specifier: 'catalog:' - version: 1.13.5 + version: 1.15.0 isbot: specifier: ^5.1.31 version: 5.1.31 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) @@ -224,9 +231,6 @@ importers: specifier: 'catalog:' version: 13.0.0 devDependencies: - '@dotenvx/dotenvx': - specifier: 'catalog:' - version: 1.51.1 '@plane/tailwind-config': specifier: workspace:* version: link:../../packages/tailwind-config @@ -235,7 +239,7 @@ importers: version: link:../../packages/typescript-config '@react-router/dev': specifier: 'catalog:' - version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1) + version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))(yaml@2.8.3) '@types/lodash-es': specifier: 'catalog:' version: 4.17.12 @@ -248,27 +252,27 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 18.3.1 + dotenv: + specifier: 'catalog:' + version: 16.4.7 typescript: specifier: 5.8.3 version: 5.8.3 vite: - specifier: 7.3.1 - version: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + specifier: 7.3.2 + version: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) apps/live: dependencies: - '@dotenvx/dotenvx': - specifier: 'catalog:' - version: 1.51.1 '@effect/platform': specifier: ^0.94.0 - version: 0.94.1(effect@3.19.14) + version: 0.94.1(effect@3.20.0) '@effect/platform-node': specifier: ^0.104.0 - version: 0.104.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14) + version: 0.104.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0) '@fontsource/inter': specifier: 5.2.8 version: 5.2.8 @@ -313,16 +317,19 @@ importers: version: 2.26.2(@tiptap/core@2.26.3(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) axios: specifier: 'catalog:' - version: 1.13.5 + version: 1.15.0 compression: specifier: 1.8.1 version: 1.8.1 cors: specifier: ^2.8.5 version: 2.8.5 + dotenv: + specifier: 'catalog:' + version: 16.4.7 effect: - specifier: ^3.16.3 - version: 3.19.14 + specifier: 3.20.0 + version: 3.20.0 express: specifier: 4.22.0 version: 4.22.0 @@ -389,19 +396,19 @@ importers: version: 8.18.1 '@vitest/coverage-v8': specifier: ^4.0.8 - version: 4.0.17(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 4.0.17(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) pdf-parse: specifier: ^2.4.5 version: 2.4.5 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 vitest: specifier: ^4.0.8 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) apps/space: dependencies: @@ -455,7 +462,7 @@ importers: version: 7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) axios: specifier: 'catalog:' - version: 1.13.5 + version: 1.15.0 clsx: specifier: ^2.0.0 version: 2.1.1 @@ -466,8 +473,8 @@ importers: specifier: ^5.1.31 version: 5.1.31 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) @@ -508,9 +515,6 @@ importers: specifier: 'catalog:' version: 13.0.0 devDependencies: - '@dotenvx/dotenvx': - specifier: 'catalog:' - version: 1.51.1 '@plane/tailwind-config': specifier: workspace:* version: link:../../packages/tailwind-config @@ -519,7 +523,7 @@ importers: version: link:../../packages/typescript-config '@react-router/dev': specifier: 'catalog:' - version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1) + version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))(yaml@2.8.3) '@tailwindcss/typography': specifier: 0.5.19 version: 0.5.19 @@ -535,15 +539,18 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 18.3.1 + dotenv: + specifier: 'catalog:' + version: 16.4.7 typescript: specifier: 5.8.3 version: 5.8.3 vite: - specifier: 7.3.1 - version: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + specifier: 7.3.2 + version: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) apps/web: dependencies: @@ -571,9 +578,6 @@ importers: '@headlessui/react': specifier: ^1.7.19 version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@intercom/messenger-js-sdk': - specifier: ^0.0.12 - version: 0.0.12 '@plane/constants': specifier: workspace:* version: link:../../packages/constants @@ -618,7 +622,7 @@ importers: version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: 'catalog:' - version: 1.13.5 + version: 1.15.0 clsx: specifier: ^2.0.0 version: 2.1.1 @@ -641,8 +645,8 @@ importers: specifier: ^5.1.31 version: 5.1.31 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) @@ -713,9 +717,6 @@ importers: specifier: 'catalog:' version: 13.0.0 devDependencies: - '@dotenvx/dotenvx': - specifier: 'catalog:' - version: 1.51.1 '@plane/tailwind-config': specifier: workspace:* version: link:../../packages/tailwind-config @@ -724,7 +725,7 @@ importers: version: link:../../packages/typescript-config '@react-router/dev': specifier: 'catalog:' - version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1) + version: 7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))(yaml@2.8.3) '@tailwindcss/typography': specifier: 0.5.19 version: 0.5.19 @@ -743,15 +744,18 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 18.3.1 + dotenv: + specifier: 'catalog:' + version: 16.4.7 typescript: specifier: 5.8.3 version: 5.8.3 vite: - specifier: 7.3.1 - version: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + specifier: 7.3.2 + version: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) packages/codemods: devDependencies: @@ -769,7 +773,7 @@ importers: version: 17.3.0 vitest: specifier: ^4.0.8 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) packages/constants: dependencies: @@ -788,7 +792,7 @@ importers: version: 18.3.11 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -812,7 +816,7 @@ importers: version: 0.2.2 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -934,8 +938,8 @@ importers: specifier: ^4.3.2 version: 4.3.2 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lowlight: specifier: ^3.0.0 version: 3.3.0 @@ -996,7 +1000,7 @@ importers: version: 8.5.6 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1018,7 +1022,7 @@ importers: version: 18.3.11 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1032,8 +1036,8 @@ importers: specifier: ^10.7.11 version: 10.7.16 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 mobx: specifier: 'catalog:' version: 6.12.0 @@ -1058,7 +1062,7 @@ importers: version: 18.3.11 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1083,7 +1087,7 @@ importers: version: 22.12.0 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1153,13 +1157,13 @@ importers: version: link:../typescript-config '@storybook/addon-designs': specifier: 10.0.2 - version: 10.0.2(@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 10.0.2(@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/addon-docs': specifier: 9.1.10 - version: 9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/react-vite': specifier: 9.1.10 - version: 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@types/react': specifier: 'catalog:' version: 18.3.11 @@ -1168,10 +1172,10 @@ importers: version: 18.3.1 storybook: specifier: 9.1.19 - version: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1186,17 +1190,17 @@ importers: version: link:../types axios: specifier: 'catalog:' - version: 1.13.5 + version: 1.15.0 file-type: - specifier: ^21.0.0 - version: 21.0.0 + specifier: ^21.3.1 + version: 21.3.3 devDependencies: '@plane/typescript-config': specifier: workspace:* version: link:../typescript-config tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1213,8 +1217,8 @@ importers: specifier: workspace:* version: link:../utils lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 mobx: specifier: 'catalog:' version: 6.12.0 @@ -1239,19 +1243,20 @@ importers: version: 22.12.0 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 packages/tailwind-config: - devDependencies: + dependencies: '@tailwindcss/postcss': specifier: 4.1.17 version: 4.1.17 postcss: specifier: 8.5.6 version: 8.5.6 + devDependencies: tailwindcss: specifier: 4.1.17 version: 4.1.17 @@ -1279,7 +1284,7 @@ importers: version: 18.3.1 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1328,8 +1333,8 @@ importers: specifier: ^2.0.0 version: 2.1.1 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) @@ -1366,34 +1371,34 @@ importers: version: link:../typescript-config '@storybook/addon-essentials': specifier: ^8.1.1 - version: 8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/addon-interactions': specifier: ^8.1.1 - version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/addon-links': specifier: ^8.1.1 - version: 8.6.14(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/addon-onboarding': specifier: ^8.1.1 - version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/addon-styling-webpack': specifier: ^1.0.0 - version: 1.0.1(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + version: 1.0.1(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@storybook/addon-webpack5-compiler-swc': specifier: ^1.0.2 version: 1.0.6(@swc/helpers@0.5.17)(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@storybook/blocks': specifier: ^8.1.1 - version: 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/react': specifier: ^8.1.1 - version: 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + version: 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) '@storybook/react-webpack5': specifier: ^8.1.1 - version: 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + version: 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) '@storybook/test': specifier: ^8.1.1 - version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + version: 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@types/lodash-es': specifier: 'catalog:' version: 4.17.12 @@ -1420,10 +1425,10 @@ importers: version: 6.2.0(postcss@8.5.6) storybook: specifier: 9.1.19 - version: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + version: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1452,8 +1457,8 @@ importers: specifier: ^10.1.2 version: 10.1.2 lodash-es: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.0 + version: 4.18.0 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) @@ -1514,7 +1519,7 @@ importers: version: 2.16.0 tsdown: specifier: 'catalog:' - version: 0.16.0(typescript@5.8.3) + version: 0.16.0(typescript@5.8.3)(unrun@0.2.34) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1528,10 +1533,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -1552,10 +1553,6 @@ packages: resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} - engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} @@ -1630,11 +1627,6 @@ packages: resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} @@ -1836,16 +1828,6 @@ packages: '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} - '@dotenvx/dotenvx@1.51.1': - resolution: {integrity: sha512-fqcQxcxC4LOaUlW8IkyWw8x0yirlLUkbxohz9OnWvVWjf73J5yyw7jxWnkOJaUKXZotcGEScDox9MU6rSkcDgg==} - hasBin: true - - '@ecies/ciphers@0.2.4': - resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - peerDependencies: - '@noble/ciphers': ^1.0.0 - '@effect/cluster@0.56.1': resolution: {integrity: sha512-gnrsH6kfrUjn+82j/bw1IR4yFqJqV8tc7xZvrbJPRgzANycc6K1hu3LMg548uYbUkTzD8YYyqrSatMO1mkQpzw==} peerDependencies: @@ -1915,9 +1897,6 @@ packages: '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -2331,9 +2310,6 @@ packages: cpu: [x64] os: [win32] - '@intercom/messenger-js-sdk@0.0.12': - resolution: {integrity: sha512-xoUGlKLD8nIcZaH7AesR/LfwXH4QQUdPZMV4sApK/zvVFBgAY/A9IWp1ey/jUcp+776ejtZeEqreJZxG4LdEuw==} - '@ioredis/commands@1.3.0': resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} @@ -2345,7 +2321,7 @@ packages: resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} peerDependencies: typescript: 5.8.3 - vite: 7.3.1 + vite: 7.3.2 peerDependenciesMeta: typescript: optional: true @@ -2492,25 +2468,16 @@ packages: resolution: {integrity: sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.0': - resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} - - '@noble/ciphers@1.3.0': - resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/curves@1.9.7': - resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.96.0': resolution: {integrity: sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==} @@ -2849,8 +2816,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@quansync/fs@0.1.5': - resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -3057,9 +3024,6 @@ packages: '@react-pdf/font@2.5.2': resolution: {integrity: sha512-Ud0EfZ2FwrbvwAWx8nz+KKLmiqACCH9a/N/xNDOja0e/YgSnqTpuyHegFBgIMKjuBtO5dNvkb4dXkxAhGe/ayw==} - '@react-pdf/font@4.0.2': - resolution: {integrity: sha512-/dAWu7Y2RD1RxarDZ9SkYPHgBYOhmcDnet4W/qN/m8k+A2Hr3ja54GymSR7GGxWBtxjKtNauVKrTa9LS1n8WUw==} - '@react-pdf/font@4.0.4': resolution: {integrity: sha512-8YtgGtL511txIEc9AjiilpZ7yjid8uCd8OGUl6jaL3LIHnrToUupSN4IzsMQpVTCMYiDLFnDNQzpZsOYtRS/Pg==} @@ -3078,9 +3042,6 @@ packages: '@react-pdf/pdfkit@3.2.0': resolution: {integrity: sha512-OBfCcnTC6RpD9uv9L2woF60Zj1uQxhLFzTBXTdcYE9URzPE/zqXIyzpXEA4Vf3TFbvBCgFE2RzJ2ZUS0asq7yA==} - '@react-pdf/pdfkit@4.0.3': - resolution: {integrity: sha512-k+Lsuq8vTwWsCqTp+CCB4+2N+sOTFrzwGA7aw3H9ix/PDWR9QksbmNg0YkzGbLAPI6CeawmiLHcf4trZ5ecLPQ==} - '@react-pdf/pdfkit@4.1.0': resolution: {integrity: sha512-Wm/IOAv0h/U5Ra94c/PltFJGcpTUd/fwVMVeFD6X9tTTPCttIwg0teRG1Lqq617J8K4W7jpL/B0HTH0mjp3QpQ==} @@ -3120,9 +3081,6 @@ packages: '@react-pdf/stylesheet@4.3.0': resolution: {integrity: sha512-x7IVZOqRrUum9quuDeFXBveXwBht+z/6B0M+z4a4XjfSg1vZVvzoTl07Oa1yvQ/4yIC5yIkG2TSMWeKnDB+hrw==} - '@react-pdf/stylesheet@6.1.0': - resolution: {integrity: sha512-BGZ2sYNUp38VJUegjva/jsri3iiRGnVNjWI+G9dTwAvLNOmwFvSJzqaCsEnqQ/DW5mrTBk/577FhDY7pv6AidA==} - '@react-pdf/stylesheet@6.1.2': resolution: {integrity: sha512-E3ftGRYUQGKiN3JOgtGsLDo0hGekA6dmkmi/MYACytmPTKxQRBSO3126MebmCq+t1rgU9uRlREIEawJ+8nzSbw==} @@ -3145,7 +3103,7 @@ packages: react-router: ^7.13.1 react-server-dom-webpack: ^19.2.3 typescript: 5.8.3 - vite: 7.3.1 + vite: 7.3.2 wrangler: ^3.28.2 || ^4.0.0 peerDependenciesMeta: '@react-router/serve': @@ -3199,30 +3157,60 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-beta.46': resolution: {integrity: sha512-w4IyumCQkpA3ezZ37COG3mMusFYxjEE8zqCfXZU/qb5k1JMD2kVl0fgJafIbGli27tgelYMweXkJGnlrxSGT9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.46': resolution: {integrity: sha512-9QqaRHPbdAnv306+7nzltq4CktJ49Z4W9ybHLWYxSeDSoOGL4l1QmxjDWoRHrqYEkNr+DWHqqoD4NNHgOk7lKw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-beta.46': resolution: {integrity: sha512-Cuk5opdEMb+Evi7QcGArc4hWVoHSGz/qyUUWLTpFJWjylb8wH1u4f+HZE6gVGACuf4w/5P/VhAIamHyweAbBVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.46': resolution: {integrity: sha512-BPWDxEnxb4JNMXrSmPuc5ywI6cHOELofmT0e/WGkbL1MwKYRVvqTf+gMcGLF6zAV+OF5hLYMAEk8XKfao6xmDQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.46': resolution: {integrity: sha512-CDQSVlryuRC955EwgbBK1h/6xQyttSxQG8+6/PeOfvUlfKGPMbBdcsOEHzGve5ED1Y7Ovh2UFjY/eT106aQqig==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3230,6 +3218,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.46': resolution: {integrity: sha512-6IZHycZetmVaC9zwcl1aA9fPYPuxLa5apALjJRoJu/2BZdER3zBWxDnCzlEh4SUlo++cwdfV9ZQRK9JS8cLNuA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3237,6 +3232,27 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.46': resolution: {integrity: sha512-R/kI8fMnsxXvWzcMv5A408hfvrwtAwD/HdQKIE1HKWmfxdSHB11Y3PVwlnt7RVo7I++6mWCIxxj5o3gut4ibEw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3244,6 +3260,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.46': resolution: {integrity: sha512-vGUXKuHGUlG2XBwvN4A8KIegeaVVxN2ZxdGG9thycwRkzUvZ9ccKvqUVZM8cVRyNRWgVgsGCS18qLUefVplwKw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3251,23 +3274,47 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.0-beta.46': resolution: {integrity: sha512-6SpDGH+0Dud3/RFDoC6fva6+Cm/0COnMRKR8kI4ssHWlCXPymlM59kYFCIBLZZqwURpNVVMPln4rWjxXuwD23w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.46': resolution: {integrity: sha512-peWDGp8YUAbTw5RJzr9AuPlTuf2adr+TBNIGF6ysMbobBKuQL41wYfGQlcerXJfLmjnQLf6DU2zTPBTfrS2Y8A==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.46': resolution: {integrity: sha512-Ydbwg1JCnVbTAuDyKtu3dOuBLgZ6iZsy8p1jMPX/r7LMPnpXnS15GNcmMwa11nyl/M2VjGE1i/MORUTMt8mnRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.46': resolution: {integrity: sha512-XcPZG2uDxEn6G3takXQvi7xWgDiJqdC0N6mubL/giKD4I65zgQtbadwlIR8oDB/erOahZr5IX8cRBVcK3xcvpg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3280,9 +3327,18 @@ packages: cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.46': resolution: {integrity: sha512-xMNwJo/pHkEP/mhNVnW+zUiJDle6/hxrwO0mfSJuEVRbBfgrJFuUSRoZx/nYUw5pCjrysl9OkNXCkAdih8GCnA==} + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} @@ -3547,7 +3603,7 @@ packages: resolution: {integrity: sha512-0ogI+toZJYaFptcFpRcRPOZ9/NrFUYhiaI09ggeEB1FF9ygHMVsobp4eaj4HjZI6V3x7cQwkd2ZmxAMQDBQuMA==} peerDependencies: storybook: ^9.1.10 - vite: 7.3.1 + vite: 7.3.2 '@storybook/builder-webpack5@8.6.14': resolution: {integrity: sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA==} @@ -3647,7 +3703,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^9.1.10 - vite: 7.3.1 + vite: 7.3.2 '@storybook/react-webpack5@8.6.14': resolution: {integrity: sha512-ka0q9tQBLruhO38sybP/MkZzejqAltce7HJTJ2KKbUYUlbvuG7m56tBX7DVC5JaImbsO3b8fqOrKH7gRt4KYrQ==} @@ -4126,13 +4182,43 @@ packages: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tokenizer/inflate@0.2.7': - resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@turbo/darwin-64@2.9.4': + resolution: {integrity: sha512-ZSlPqJ5Vqg/wgVw8P3AOVCIosnbBilOxLq7TMz3MN/9U46DUYfdG2jtfevNDufyxyrg98pcPs/GBgDRaaids6g==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.9.4': + resolution: {integrity: sha512-9cjTWe4OiNlFMSRggPNh+TJlRs7MS5FWrHc96MOzft5vESWjjpvaadYPv5ykDW7b45mVHOF2U/W+48LoX9USWw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.9.4': + resolution: {integrity: sha512-Cl1GjxqBXQ+r9KKowmXG+lhD1gclLp48/SE7NxL//66iaMytRw0uiphWGOkccD92iPiRjHLRUaA9lOTtgr5OCA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.9.4': + resolution: {integrity: sha512-j2hPAKVmGNN2EsKigEWD+43y9m7zaPhNAs6ptsyfq0u7evHHBAXAwOfv86OEMg/gvC+pwGip0i1CIm1bR1vYug==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.9.4': + resolution: {integrity: sha512-1jWPjCe9ZRmsDTXE7uzqfySNQspnUx0g6caqvwps+k/sc+fm9hC/4zRQKlXZLbVmP3Xxp601Ju71boegHdnYGw==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.9.4': + resolution: {integrity: sha512-dlko15TQVu/BFYmIY018Y3covWMRQlUgAkD+OOk+Rokcfj6VY02Vv4mCfT/Zns6B4q8jGbOd6IZhnCFYsE8Viw==} + cpu: [arm64] + os: [win32] + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -4381,7 +4467,7 @@ packages: resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: 7.3.1 + vite: 7.3.2 peerDependenciesMeta: msw: optional: true @@ -4392,7 +4478,7 @@ packages: resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==} peerDependencies: msw: ^2.4.9 - vite: 7.3.1 + vite: 7.3.2 peerDependenciesMeta: msw: optional: true @@ -4654,8 +4740,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.13.5: - resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} + axios@1.15.0: + resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} babel-dead-code-elimination@1.0.10: resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} @@ -4667,8 +4753,9 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} @@ -4677,10 +4764,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.4: - resolution: {integrity: sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==} - hasBin: true - baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -4723,8 +4806,9 @@ packages: resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} engines: {node: '>=14.16'} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -4739,11 +4823,6 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.26.2: - resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -4967,10 +5046,6 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - commander@14.0.2: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} @@ -5215,8 +5290,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.5: + resolution: {integrity: sha512-pwdBJxJuJXmqrLO6s0VBmfbRz+G7FUzkjldAsdi9Yrv86mPyzq0ll1o8+8gB4Gsr6GJHbK1Lh3ngllgTInDCjA==} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -5311,8 +5386,8 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dotenv@17.2.1: - resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} dts-resolver@2.1.3: @@ -5331,18 +5406,11 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - eciesjs@0.4.15: - resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.19.14: - resolution: {integrity: sha512-3vwdq0zlvQOxXzXNKRIPKTqZNMyGCdaFUBfMPqpsyzZDre67kgC1EEHDV4EoQTovJ4w5fmJW756f86kkuz7WFA==} - - electron-to-chromium@1.5.218: - resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==} + effect@3.20.0: + resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} electron-to-chromium@1.5.286: resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} @@ -5579,7 +5647,7 @@ packages: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: - picomatch: ^3 || ^4 + picomatch: 2.3.2 peerDependenciesMeta: picomatch: optional: true @@ -5587,15 +5655,12 @@ packages: fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - file-selector@2.1.2: resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} engines: {node: '>= 12'} - file-type@21.0.0: - resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} + file-type@21.3.3: + resolution: {integrity: sha512-pNwbwz8c3aZ+GvbJnIsCnDjKvgCZLHxkFWLEFxU3RMa+Ey++ZSEfisvsWQMcdys6PpxQjWUOIDi1fifXsW3YRg==} engines: {node: '>=20'} filesize@10.1.6: @@ -5647,8 +5712,8 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} flow-parser@0.293.0: resolution: {integrity: sha512-8tEGAcWpCqioajiSqrJr2+JSmkEI2vO/UACFGG378RO106ez9xugVxe9EpXD3aI1Vbf+mEUGhMt0gMpveJwVGA==} @@ -5782,8 +5847,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -5795,6 +5860,7 @@ packages: glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globrex@0.1.2: @@ -5983,10 +6049,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - imagesloaded@4.1.4: resolution: {integrity: sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==} @@ -6137,10 +6199,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -6171,10 +6229,6 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -6387,8 +6441,9 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.0: + resolution: {integrity: sha512-koAgswPPA+UTaPN64Etp+PGP+WT6oqOS2NMi5yDkMaiGw9qY4VxQbQF0mtKMyr4BlTznWyzePV5UpECTJQmSUA==} + deprecated: Bad release. Please use lodash-es@4.17.23 instead. lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -6402,8 +6457,8 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} @@ -6448,9 +6503,6 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -6890,9 +6942,6 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-releases@2.0.21: - resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -6936,10 +6985,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} @@ -7102,11 +7147,8 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -7134,14 +7176,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -7358,8 +7396,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -7379,8 +7418,8 @@ packages: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} @@ -7709,6 +7748,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7761,10 +7805,6 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.2: - resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} - engines: {node: '>= 10.13.0'} - schema-utils@4.3.3: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} @@ -7780,13 +7820,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -7797,8 +7832,8 @@ packages: sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - serialize-javascript@7.0.3: - resolution: {integrity: sha512-h+cZ/XXarqDgCjo+YSyQU/ulDEESGGf8AMK9pPNmhNSl/FzPl6L8pMp1leca5z6NuG6tvV/auC8/43tmovowww==} + serialize-javascript@7.0.5: + resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} engines: {node: '>=20.0.0'} serve-handler@6.1.6: @@ -7955,10 +7990,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - strip-ansi@7.1.2: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} @@ -8042,22 +8073,6 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: 5.104.1 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - terser-webpack-plugin@5.3.16: resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} engines: {node: '>= 10.13.0'} @@ -8097,8 +8112,8 @@ packages: tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} tinyglobby@0.2.15: @@ -8240,38 +8255,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo-darwin-64@2.8.12: - resolution: {integrity: sha512-EiHJmW2MeQQx+21x8hjMHw/uPhXt9PIxvDrxzOtyVwrXzL0tQmsxtO4qHf2l7uA+K6PUJ4+TjY1MHZDuCvWXrw==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.8.12: - resolution: {integrity: sha512-cbqqGN0vd7ly2TeuaM8k9AK9u1CABO4kBA5KPSqovTiLL3sORccn/mZzJSbvQf0EsYRfU34MgW5FotfwW3kx8Q==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.8.12: - resolution: {integrity: sha512-jXKw9j4r4q6s0goSXuKI3aKbQK2qiNeP25lGGEnq018TM6SWRW1CCpPMxyG91aCKrub7wDm/K45sGNT4ZFBcFQ==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.8.12: - resolution: {integrity: sha512-BRJCMdyXjyBoL0GYpvj9d2WNfMHwc3tKmJG5ATn2Efvil9LsiOsd/93/NxDqW0jACtHFNVOPnd/CBwXRPiRbwA==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.8.12: - resolution: {integrity: sha512-vyFOlpFFzQFkikvSVhVkESEfzIopgs2J7J1rYvtSwSHQ4zmHxkC95Q8Kjkus8gg+8X2mZyP1GS5jirmaypGiPw==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.8.12: - resolution: {integrity: sha512-9nRnlw5DF0LkJClkIws1evaIF36dmmMEO84J5Uj4oQ8C0QTHwlH7DNe5Kq2Jdmu8GXESCNDNuUYG8Cx6W/vm3g==} - cpu: [arm64] - os: [win32] - - turbo@2.8.12: - resolution: {integrity: sha512-auUAMLmi0eJhxDhQrxzvuhfEbICnVt0CTiYQYY8WyRJ5nwCDZxD0JG8bCSxT4nusI2CwJzmZAay5BfF6LmK7Hw==} + turbo@2.9.4: + resolution: {integrity: sha512-wZ/kMcZCuK5oEp7sXSSo/5fzKjP9I2EhoiarZjyCm2Ixk0WxFrC/h0gF3686eHHINoFQOOSWgB/pGfvkR8rkgQ==} hasBin: true tween-functions@1.2.0: @@ -8300,14 +8285,17 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - unconfig@7.3.3: - resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==} + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + + unconfig@7.5.0: + resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} + undici@7.24.0: + resolution: {integrity: sha512-jxytwMHhsbdpBXxLAcuu0fzlQeXCNnWdDyRHpvWsUl8vd98UwYdl9YTyn8/HcpcJPC3pwUveefsa3zTxyD/ERg==} engines: {node: '>=20.18.1'} unicode-properties@1.4.1: @@ -8368,11 +8356,15 @@ packages: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + unrun@0.2.34: + resolution: {integrity: sha512-LyaghRBR++r7svhDK6tnDz2XaYHWdneBOA0jbS8wnRsHerI9MFljX4fIiTgbbNbEVzZ0C9P1OjWLLe1OqoaaEw==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: - browserslist: '>= 4.21.0' + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -8498,13 +8490,13 @@ packages: vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: 7.3.1 + vite: 7.3.2 peerDependenciesMeta: vite: optional: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -8518,7 +8510,7 @@ packages: sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 - yaml: ^2.4.2 + yaml: 2.8.3 peerDependenciesMeta: '@types/node': optional: true @@ -8655,11 +8647,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -8753,12 +8740,12 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -8804,11 +8791,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -8842,26 +8824,6 @@ snapshots: '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.3': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.26.10 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.28.4': dependencies: '@babel/code-frame': 7.27.1 @@ -8898,23 +8860,10 @@ snapshots: dependencies: '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.2 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -8944,15 +8893,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -8968,15 +8908,6 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -9004,22 +8935,13 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.5 - '@babel/parser@7.28.3': - dependencies: - '@babel/types': 7.28.5 - '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': @@ -9027,37 +8949,24 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.3) - - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': dependencies: @@ -9067,35 +8976,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.3)': + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color @@ -9110,23 +9008,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.27.1(@babel/core@7.28.3)': + '@babel/preset-flow@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.3) - - '@babel/preset-typescript@7.27.1(@babel/core@7.28.3)': - dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) - transitivePeerDependencies: - - supports-color + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.4) '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: @@ -9139,9 +9026,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/register@7.28.3(@babel/core@7.28.3)': + '@babel/register@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -9295,94 +9182,78 @@ snapshots: '@date-fns/tz@1.4.1': {} - '@dotenvx/dotenvx@1.51.1': - dependencies: - commander: 11.1.0 - dotenv: 17.2.1 - eciesjs: 0.4.15 - execa: 5.1.1 - fdir: 6.5.0(picomatch@4.0.3) - ignore: 5.3.2 - object-treeify: 1.1.33 - picomatch: 4.0.3 - which: 4.0.0 - - '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': - dependencies: - '@noble/ciphers': 1.3.0 - - '@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14)': + '@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/platform': 0.94.1(effect@3.19.14) - '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - '@effect/workflow': 0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14) - effect: 3.19.14 + '@effect/platform': 0.94.1(effect@3.20.0) + '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + '@effect/workflow': 0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0) + effect: 3.20.0 kubernetes-types: 1.30.0 - '@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0)': + '@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0)': dependencies: - '@effect/platform': 0.94.1(effect@3.19.14) - effect: 3.19.14 + '@effect/platform': 0.94.1(effect@3.20.0) + effect: 3.20.0 uuid: 11.1.0 optionalDependencies: ioredis: 5.7.0 - '@effect/platform-node-shared@0.57.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14)': + '@effect/platform-node-shared@0.57.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/cluster': 0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14) - '@effect/platform': 0.94.1(effect@3.19.14) - '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) + '@effect/cluster': 0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0) + '@effect/platform': 0.94.1(effect@3.20.0) + '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) '@parcel/watcher': 2.5.4 - effect: 3.19.14 + effect: 3.20.0 multipasta: 0.2.7 ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@0.104.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14)': + '@effect/platform-node@0.104.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/cluster': 0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14) - '@effect/platform': 0.94.1(effect@3.19.14) - '@effect/platform-node-shared': 0.57.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(effect@3.19.14))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14) - '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - effect: 3.19.14 + '@effect/cluster': 0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0) + '@effect/platform': 0.94.1(effect@3.20.0) + '@effect/platform-node-shared': 0.57.0(@effect/cluster@0.56.1(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(effect@3.20.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0) + '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + '@effect/sql': 0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + effect: 3.20.0 mime: 3.0.0 - undici: 7.18.2 + undici: 7.24.0 ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform@0.94.1(effect@3.19.14)': + '@effect/platform@0.94.1(effect@3.20.0)': dependencies: - effect: 3.19.14 + effect: 3.20.0 find-my-way-ts: 0.1.6 msgpackr: 1.11.8 multipasta: 0.2.7 - '@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)': + '@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/platform': 0.94.1(effect@3.19.14) - effect: 3.19.14 + '@effect/platform': 0.94.1(effect@3.20.0) + effect: 3.20.0 msgpackr: 1.11.8 - '@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)': + '@effect/sql@0.49.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/experimental': 0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0) - '@effect/platform': 0.94.1(effect@3.19.14) - effect: 3.19.14 + '@effect/experimental': 0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0) + '@effect/platform': 0.94.1(effect@3.20.0) + effect: 3.20.0 uuid: 11.1.0 - '@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.19.14))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14))(effect@3.19.14)': + '@effect/workflow@0.16.0(@effect/experimental@0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0))(@effect/platform@0.94.1(effect@3.20.0))(@effect/rpc@0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0))(effect@3.20.0)': dependencies: - '@effect/experimental': 0.58.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14)(ioredis@5.7.0) - '@effect/platform': 0.94.1(effect@3.19.14) - '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.19.14))(effect@3.19.14) - effect: 3.19.14 + '@effect/experimental': 0.58.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0)(ioredis@5.7.0) + '@effect/platform': 0.94.1(effect@3.20.0) + '@effect/rpc': 0.73.0(@effect/platform@0.94.1(effect@3.20.0))(effect@3.20.0) + effect: 3.20.0 '@emnapi/core@1.7.1': dependencies: @@ -9390,11 +9261,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 @@ -9727,7 +9593,7 @@ snapshots: '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.5.0 + '@emnapi/runtime': 1.7.1 optional: true '@img/sharp-win32-arm64@0.34.3': @@ -9739,25 +9605,23 @@ snapshots: '@img/sharp-win32-x64@0.34.3': optional: true - '@intercom/messenger-js-sdk@0.0.12': {} - '@ioredis/commands@1.3.0': {} '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: glob: 11.1.0 magic-string: 0.30.21 react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) optionalDependencies: typescript: 5.8.3 @@ -9866,24 +9730,19 @@ snapshots: '@napi-rs/canvas-linux-x64-musl': 0.1.80 '@napi-rs/canvas-win32-x64-msvc': 0.1.80 - '@napi-rs/wasm-runtime@1.1.0': + '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.7.1 '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true - '@noble/ciphers@1.3.0': {} - - '@noble/curves@1.9.7': - dependencies: - '@noble/hashes': 1.8.0 - - '@noble/hashes@1.8.0': {} - '@opentelemetry/api@1.9.0': optional: true + '@oxc-project/types@0.122.0': + optional: true + '@oxc-project/types@0.96.0': {} '@oxfmt/binding-android-arm-eabi@0.35.0': @@ -10044,7 +9903,7 @@ snapshots: detect-libc: 2.0.4 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 2.3.2 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.4 '@parcel/watcher-darwin-arm64': 2.5.4 @@ -10062,9 +9921,9 @@ snapshots: '@popperjs/core@2.11.8': {} - '@quansync/fs@0.1.5': + '@quansync/fs@1.0.0': dependencies: - quansync: 0.2.11 + quansync: 1.0.0 '@radix-ui/number@1.1.1': {} @@ -10250,13 +10109,6 @@ snapshots: transitivePeerDependencies: - encoding - '@react-pdf/font@4.0.2': - dependencies: - '@react-pdf/pdfkit': 4.0.3 - '@react-pdf/types': 2.9.2 - fontkit: 2.0.4 - is-url: 1.2.4 - '@react-pdf/font@4.0.4': dependencies: '@react-pdf/pdfkit': 4.1.0 @@ -10300,7 +10152,7 @@ snapshots: '@react-pdf/fns': 3.1.2 '@react-pdf/image': 3.0.3 '@react-pdf/primitives': 4.1.1 - '@react-pdf/stylesheet': 6.1.0 + '@react-pdf/stylesheet': 6.1.2 '@react-pdf/textkit': 6.0.0 '@react-pdf/types': 2.9.2 emoji-regex: 10.5.0 @@ -10317,17 +10169,6 @@ snapshots: jay-peg: 1.1.1 vite-compatible-readable-stream: 3.6.1 - '@react-pdf/pdfkit@4.0.3': - dependencies: - '@babel/runtime': 7.26.10 - '@react-pdf/png-js': 3.0.0 - browserify-zlib: 0.2.0 - crypto-js: 4.2.0 - fontkit: 2.0.4 - jay-peg: 1.1.1 - linebreak: 1.1.0 - vite-compatible-readable-stream: 3.6.1 - '@react-pdf/pdfkit@4.1.0': dependencies: '@babel/runtime': 7.26.10 @@ -10405,9 +10246,9 @@ snapshots: dependencies: '@babel/runtime': 7.26.10 '@react-pdf/fns': 3.1.2 - '@react-pdf/font': 4.0.2 + '@react-pdf/font': 4.0.4 '@react-pdf/layout': 4.4.0 - '@react-pdf/pdfkit': 4.0.3 + '@react-pdf/pdfkit': 4.1.0 '@react-pdf/primitives': 4.1.1 '@react-pdf/reconciler': 1.1.4(react@18.3.1) '@react-pdf/render': 4.3.0 @@ -10428,15 +10269,6 @@ snapshots: media-engine: 1.0.3 postcss-value-parser: 4.2.0 - '@react-pdf/stylesheet@6.1.0': - dependencies: - '@react-pdf/fns': 3.1.2 - '@react-pdf/types': 2.9.2 - color-string: 1.9.1 - hsl-to-hex: 1.0.0 - media-engine: 1.0.3 - postcss-value-parser: 4.2.0 - '@react-pdf/stylesheet@6.1.2': dependencies: '@react-pdf/fns': 3.1.2 @@ -10467,7 +10299,7 @@ snapshots: '@react-pdf/primitives': 4.1.1 '@react-pdf/stylesheet': 6.1.2 - '@react-router/dev@7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)': + '@react-router/dev@7.13.1(@react-router/serve@7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))(yaml@2.8.3)': dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.5 @@ -10486,7 +10318,7 @@ snapshots: exit-hook: 2.2.1 isbot: 5.1.31 jsesc: 3.0.2 - lodash: 4.17.23 + lodash: 4.18.1 p-map: 7.0.3 pathe: 1.1.2 picocolors: 1.1.1 @@ -10494,11 +10326,11 @@ snapshots: prettier: 3.7.4 react-refresh: 0.14.2 react-router: 7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 valibot: 1.2.0(typescript@5.8.3) - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) optionalDependencies: '@react-router/serve': 7.13.1(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) typescript: 5.8.3 @@ -10554,54 +10386,104 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.46': optional: true + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.46': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.46': optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.46': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.46': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.46': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.46': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.46': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.46': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-beta.46': optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.46': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.46': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.46': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-beta.46': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + optional: true + '@rolldown/pluginutils@1.0.0-beta.46': {} + '@rolldown/pluginutils@1.0.0-rc.12': + optional: true + '@rollup/pluginutils@5.2.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 2.3.2 optionalDependencies: rollup: 4.59.0 @@ -10682,133 +10564,133 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@storybook/addon-actions@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-actions@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-backgrounds@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-controls@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - '@storybook/addon-designs@10.0.2(@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-designs@10.0.2(@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@figspec/react': 1.0.4(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) optionalDependencies: - '@storybook/addon-docs': 9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/addon-docs': 9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/addon-docs@8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-docs@8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.11)(react@18.3.1) - '@storybook/blocks': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/csf-plugin': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/react-dom-shim': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/blocks': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/csf-plugin': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/react-dom-shim': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-docs@9.1.10(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.11)(react@18.3.1) - '@storybook/csf-plugin': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/csf-plugin': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/react-dom-shim': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-backgrounds': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-controls': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-docs': 8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-highlight': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-measure': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-outline': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-toolbars': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/addon-viewport': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + '@storybook/addon-essentials@8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': + dependencies: + '@storybook/addon-actions': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-backgrounds': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-controls': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-docs': 8.6.14(@types/react@18.3.11)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-highlight': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-measure': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-outline': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-toolbars': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/addon-viewport': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-highlight@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/addon-interactions@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-interactions@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/test': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/instrumenter': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/test': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) polished: 4.3.1 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - '@storybook/addon-links@8.6.14(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-links@8.6.14(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-measure@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-onboarding@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/addon-outline@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-outline@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - '@storybook/addon-styling-webpack@1.0.1(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@storybook/addon-styling-webpack@1.0.1(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@storybook/node-logger': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/node-logger': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) transitivePeerDependencies: - storybook - '@storybook/addon-toolbars@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-toolbars@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/addon-viewport@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-viewport@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: memoizerific: 1.11.3 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@storybook/addon-webpack5-compiler-swc@1.0.6(@swc/helpers@0.5.17)(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: @@ -10818,25 +10700,25 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/blocks@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@storybook/builder-vite@9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: - '@storybook/csf-plugin': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + '@storybook/csf-plugin': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) - '@storybook/builder-webpack5@8.6.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/builder-webpack5@8.6.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/core-webpack': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 @@ -10849,10 +10731,10 @@ snapshots: magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 - semver: 7.7.3 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + semver: 7.7.4 + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) style-loader: 3.3.4(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) - terser-webpack-plugin: 5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + terser-webpack-plugin: 5.3.16(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 @@ -10870,23 +10752,23 @@ snapshots: - uglify-js - webpack-cli - '@storybook/components@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/components@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/core-webpack@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/core-webpack@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) ts-dedent: 2.2.0 - '@storybook/csf-plugin@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/csf-plugin@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) unplugin: 1.16.1 - '@storybook/csf-plugin@9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/csf-plugin@9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) unplugin: 1.16.1 '@storybook/global@5.0.0': {} @@ -10896,24 +10778,24 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/instrumenter@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.9 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/manager-api@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/manager-api@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/node-logger@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/node-logger@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + '@storybook/core-webpack': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@types/semver': 7.7.1 find-up: 5.0.0 @@ -10922,8 +10804,8 @@ snapshots: react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.10 - semver: 7.7.3 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + semver: 7.7.4 + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) tsconfig-paths: 4.2.0 webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) optionalDependencies: @@ -10936,9 +10818,9 @@ snapshots: - uglify-js - webpack-cli - '@storybook/preview-api@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/preview-api@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: @@ -10954,46 +10836,46 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/react-dom-shim@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/react-dom-shim@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/react-dom-shim@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/react-vite@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@storybook/react-vite@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@rollup/pluginutils': 5.2.0(rollup@4.59.0) - '@storybook/builder-vite': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) - '@storybook/react': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + '@storybook/builder-vite': 9.1.10(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) + '@storybook/react': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) find-up: 7.0.0 - magic-string: 0.30.19 + magic-string: 0.30.21 react: 18.3.1 react-docgen: 8.0.1 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.10 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) tsconfig-paths: 4.2.0 - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)': dependencies: - '@storybook/builder-webpack5': 8.6.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) - '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.6.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(@swc/core@1.13.5(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -11005,45 +10887,45 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)': dependencies: - '@storybook/components': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/components': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/preview-api': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/react-dom-shim': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) - '@storybook/theming': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/manager-api': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/preview-api': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/react-dom-shim': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) + '@storybook/theming': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) optionalDependencies: - '@storybook/test': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/test': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) typescript: 5.8.3 - '@storybook/react@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/react@9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))(typescript@5.8.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) optionalDependencies: typescript: 5.8.3 - '@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/test@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/instrumenter': 8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) - '@storybook/theming@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/theming@8.6.14(storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)))': dependencies: - storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@swc/core-darwin-arm64@1.13.5': optional: true @@ -11209,7 +11091,7 @@ snapshots: chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - lodash: 4.17.23 + lodash: 4.18.1 redent: 3.0.0 '@testing-library/jest-dom@6.9.1': @@ -11479,16 +11361,33 @@ snapshots: '@tiptap/core': 2.26.3(@tiptap/pm@2.26.1) '@tiptap/pm': 2.26.1 - '@tokenizer/inflate@0.2.7': + '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 - fflate: 0.8.2 token-types: 6.1.1 transitivePeerDependencies: - supports-color '@tokenizer/token@0.3.0': {} + '@turbo/darwin-64@2.9.4': + optional: true + + '@turbo/darwin-arm64@2.9.4': + optional: true + + '@turbo/linux-64@2.9.4': + optional: true + + '@turbo/linux-arm64@2.9.4': + optional: true + + '@turbo/windows-64@2.9.4': + optional: true + + '@turbo/windows-arm64@2.9.4': + optional: true + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -11742,7 +11641,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitest/coverage-v8@4.0.17(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/coverage-v8@4.0.17(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.17 @@ -11754,7 +11653,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) '@vitest/expect@2.0.5': dependencies: @@ -11780,21 +11679,21 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) - '@vitest/mocker@4.0.15(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/mocker@4.0.15(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.15 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) '@vitest/pretty-format@2.0.5': dependencies: @@ -12022,7 +11921,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 arch@2.2.0: {} @@ -12073,7 +11972,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.28.1 caniuse-lite: 1.0.30001759 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -12085,11 +11984,11 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@1.13.5: + axios@1.15.0: dependencies: follow-redirects: 1.15.11 form-data: 4.0.5 - proxy-from-env: 1.1.0 + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -12111,14 +12010,12 @@ snapshots: bail@2.0.2: {} - balanced-match@1.0.2: {} + balanced-match@4.0.4: {} base64-js@0.0.8: {} base64-js@1.5.1: {} - baseline-browser-mapping@2.8.4: {} - baseline-browser-mapping@2.9.19: {} basic-auth@2.0.1: @@ -12173,9 +12070,9 @@ snapshots: widest-line: 4.0.1 wrap-ansi: 8.1.0 - brace-expansion@2.0.2: + brace-expansion@5.0.5: dependencies: - balanced-match: 1.0.2 + balanced-match: 4.0.4 braces@3.0.3: dependencies: @@ -12191,14 +12088,6 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.26.2: - dependencies: - baseline-browser-mapping: 2.8.4 - caniuse-lite: 1.0.30001759 - electron-to-chromium: 1.5.218 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) - browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 @@ -12434,8 +12323,6 @@ snapshots: comma-separated-tokens@2.0.3: {} - commander@11.1.0: {} - commander@14.0.2: {} commander@2.20.3: {} @@ -12499,7 +12386,7 @@ snapshots: import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 create-react-class@15.7.0: dependencies: @@ -12531,7 +12418,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.6) postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) @@ -12669,7 +12556,7 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} + defu@6.1.5: {} delayed-stream@1.0.0: {} @@ -12757,7 +12644,7 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - dotenv@17.2.1: {} + dotenv@16.4.7: {} dts-resolver@2.1.3: {} @@ -12769,22 +12656,13 @@ snapshots: eastasianwidth@0.2.0: {} - eciesjs@0.4.15: - dependencies: - '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0) - '@noble/ciphers': 1.3.0 - '@noble/curves': 1.9.7 - '@noble/hashes': 1.8.0 - ee-first@1.1.1: {} - effect@3.19.14: + effect@3.20.0: dependencies: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 - electron-to-chromium@1.5.218: {} - electron-to-chromium@1.5.286: {} element-resize-detector@1.2.4: @@ -12959,7 +12837,7 @@ snapshots: express-winston@4.2.0(winston@3.17.0): dependencies: chalk: 2.4.2 - lodash: 4.17.23 + lodash: 4.18.1 winston: 3.17.0 express-ws@5.0.2(express@4.22.0): @@ -12991,7 +12869,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.13 proxy-addr: 2.0.7 qs: 6.14.2 range-parser: 1.2.1 @@ -13024,21 +12902,19 @@ snapshots: fast-uri@3.0.6: {} - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@2.3.2): optionalDependencies: - picomatch: 4.0.3 + picomatch: 2.3.2 fecha@4.2.3: {} - fflate@0.8.2: {} - file-selector@2.1.2: dependencies: tslib: 2.8.1 - file-type@21.0.0: + file-type@21.3.3: dependencies: - '@tokenizer/inflate': 0.2.7 + '@tokenizer/inflate': 0.4.1 strtok3: 10.3.4 token-types: 6.1.1 uint8array-extras: 1.5.0 @@ -13105,11 +12981,11 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 rimraf: 3.0.2 - flatted@3.3.3: {} + flatted@3.4.2: {} flow-parser@0.293.0: {} @@ -13152,7 +13028,7 @@ snapshots: minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.3 + semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) @@ -13240,7 +13116,7 @@ snapshots: get-stream@6.0.1: {} - get-tsconfig@4.13.0: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -13440,7 +13316,7 @@ snapshots: dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: @@ -13505,8 +13381,6 @@ snapshots: ieee754@1.2.1: {} - ignore@5.3.2: {} - imagesloaded@4.1.4: dependencies: ev-emitter: 1.1.1 @@ -13654,8 +13528,6 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.1: {} - isobject@3.0.1: {} isomorphic.js@0.2.5: {} @@ -13687,8 +13559,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@2.5.1: {} - jiti@2.6.1: {} js-tokens@4.0.0: {} @@ -13697,16 +13567,16 @@ snapshots: jscodeshift@17.3.0: dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.3) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.3) - '@babel/preset-flow': 7.27.1(@babel/core@7.28.3) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) - '@babel/register': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/preset-flow': 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/register': 7.28.3(@babel/core@7.28.4) flow-parser: 0.293.0 graceful-fs: 4.2.11 micromatch: 4.0.8 @@ -13858,7 +13728,7 @@ snapshots: nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.1 + yaml: 2.8.3 listr2@9.0.5: dependencies: @@ -13904,7 +13774,7 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash-es@4.17.23: {} + lodash-es@4.18.0: {} lodash.debounce@4.0.8: {} @@ -13914,7 +13784,7 @@ snapshots: lodash.isarguments@3.1.0: {} - lodash@4.17.23: {} + lodash@4.18.1: {} log-update@6.1.0: dependencies: @@ -13966,10 +13836,6 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.19: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -13991,7 +13857,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 map-or-similar@1.5.0: {} @@ -14503,7 +14369,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.33.0: {} @@ -14531,11 +14397,11 @@ snapshots: minimatch@10.2.3: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.5 minimatch@3.1.4: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.5 minimist@1.2.8: {} @@ -14641,8 +14507,6 @@ snapshots: css-select: 5.2.2 he: 1.2.0 - node-releases@2.0.21: {} - node-releases@2.0.27: {} normalize-path@3.0.0: {} @@ -14677,8 +14541,6 @@ snapshots: object-keys@1.1.1: {} - object-treeify@1.1.33: {} - objectorarray@1.0.5: {} obug@2.1.1: {} @@ -14860,9 +14722,7 @@ snapshots: lru-cache: 11.2.1 minipass: 7.1.2 - path-to-regexp@0.1.12: {} - - path-to-regexp@3.3.0: {} + path-to-regexp@0.1.13: {} path-type@4.0.0: {} @@ -14883,9 +14743,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - - picomatch@4.0.3: {} + picomatch@2.3.2: {} pidtree@0.6.0: {} @@ -14938,7 +14796,7 @@ snapshots: postcss-load-config@5.1.0(jiti@2.6.1)(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 + yaml: 2.8.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.6 @@ -15002,7 +14860,7 @@ snapshots: pretty-error@4.0.0: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 renderkid: 3.0.0 pretty-format@27.5.1: @@ -15140,7 +14998,7 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} punycode.js@2.3.1: {} @@ -15154,7 +15012,7 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.11: {} + quansync@1.0.0: {} queue@6.0.2: dependencies: @@ -15183,8 +15041,8 @@ snapshots: react-color@2.19.3(react@18.3.1): dependencies: '@icons/material': 0.2.4(react@18.3.1) - lodash: 4.17.23 - lodash-es: 4.17.23 + lodash: 4.18.1 + lodash-es: 4.18.0 material-colors: 1.2.6 prop-types: 15.8.1 react: 18.3.1 @@ -15289,7 +15147,7 @@ snapshots: create-react-class: 15.7.0 element-resize-detector: 1.2.4 imagesloaded: 4.1.4 - lodash: 4.17.23 + lodash: 4.18.1 masonry-layout: 4.2.2 prop-types: 15.8.1 react: 18.3.1 @@ -15380,7 +15238,7 @@ snapshots: reactcss@1.2.3(react@18.3.1): dependencies: - lodash: 4.17.23 + lodash: 4.18.1 react: 18.3.1 read-cache@1.0.0: @@ -15395,7 +15253,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 recast@0.23.11: dependencies: @@ -15413,7 +15271,7 @@ snapshots: dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 - lodash: 4.17.23 + lodash: 4.18.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 @@ -15526,7 +15384,7 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 strip-ansi: 6.0.1 require-directory@2.1.1: {} @@ -15566,7 +15424,7 @@ snapshots: ast-kit: 2.2.0 birpc: 2.9.0 dts-resolver: 2.1.3 - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.7 magic-string: 0.30.21 obug: 2.1.1 rolldown: 1.0.0-beta.46 @@ -15595,6 +15453,28 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.46 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.46 + rolldown@1.0.0-rc.12: + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + optional: true + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -15680,13 +15560,6 @@ snapshots: ajv: 6.14.0 ajv-keywords: 3.5.2(ajv@6.14.0) - schema-utils@4.3.2: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) - schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 @@ -15702,9 +15575,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.2: {} - - semver@7.7.3: {} + semver@7.7.4: {} send@0.19.0: dependencies: @@ -15730,7 +15601,7 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 - serialize-javascript@7.0.3: {} + serialize-javascript@7.0.5: {} serve-handler@6.1.6: dependencies: @@ -15739,7 +15610,7 @@ snapshots: mime-types: 2.1.18 minimatch: 3.1.4 path-is-inside: 1.0.2 - path-to-regexp: 3.3.0 + path-to-regexp: 0.1.13 range-parser: 1.2.0 serve-static@1.16.2: @@ -15795,7 +15666,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.4 - semver: 7.7.2 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.3 '@img/sharp-darwin-x64': 0.34.3 @@ -15901,19 +15772,19 @@ snapshots: std-env@3.10.0: {} - storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)): + storybook@9.1.19(@testing-library/dom@10.4.0)(prettier@3.7.4)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)): dependencies: '@storybook/global': 5.0.0 '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@vitest/spy': 3.2.4 better-opn: 3.0.2 esbuild: 0.25.0 esbuild-register: 3.6.0(esbuild@0.25.0) recast: 0.23.11 - semver: 7.7.3 + semver: 7.7.4 ws: 8.18.3 optionalDependencies: prettier: 3.7.4 @@ -15963,10 +15834,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.2.2 - strip-ansi@7.1.2: dependencies: ansi-regex: 6.2.2 @@ -16034,23 +15901,12 @@ snapshots: tapable@2.3.0: {} - terser-webpack-plugin@5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.2 - serialize-javascript: 7.0.3 - terser: 5.43.1 - webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) - optionalDependencies: - '@swc/core': 1.13.5(@swc/helpers@0.5.17) - terser-webpack-plugin@5.3.16(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 7.0.3 + serialize-javascript: 7.0.5 terser: 5.43.1 webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) optionalDependencies: @@ -16075,12 +15931,12 @@ snapshots: tinycolor2@1.6.0: {} - tinyexec@1.0.2: {} + tinyexec@1.0.4: {} tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@2.3.2) + picomatch: 2.3.2 tinypool@2.1.0: {} @@ -16162,7 +16018,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.16.0(typescript@5.8.3): + tsdown@0.16.0(typescript@5.8.3)(unrun@0.2.34): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -16173,13 +16029,14 @@ snapshots: hookable: 5.5.3 rolldown: 1.0.0-beta.46 rolldown-plugin-dts: 0.17.8(rolldown@1.0.0-beta.46)(typescript@5.8.3) - semver: 7.7.3 - tinyexec: 1.0.2 + semver: 7.7.4 + tinyexec: 1.0.4 tinyglobby: 0.2.15 tree-kill: 1.2.2 - unconfig: 7.3.3 + unconfig: 7.5.0 optionalDependencies: typescript: 5.8.3 + unrun: 0.2.34 transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' @@ -16191,32 +16048,14 @@ snapshots: tslib@2.8.1: {} - turbo-darwin-64@2.8.12: - optional: true - - turbo-darwin-arm64@2.8.12: - optional: true - - turbo-linux-64@2.8.12: - optional: true - - turbo-linux-arm64@2.8.12: - optional: true - - turbo-windows-64@2.8.12: - optional: true - - turbo-windows-arm64@2.8.12: - optional: true - - turbo@2.8.12: + turbo@2.9.4: optionalDependencies: - turbo-darwin-64: 2.8.12 - turbo-darwin-arm64: 2.8.12 - turbo-linux-64: 2.8.12 - turbo-linux-arm64: 2.8.12 - turbo-windows-64: 2.8.12 - turbo-windows-arm64: 2.8.12 + '@turbo/darwin-64': 2.9.4 + '@turbo/darwin-arm64': 2.9.4 + '@turbo/linux-64': 2.9.4 + '@turbo/linux-arm64': 2.9.4 + '@turbo/windows-64': 2.9.4 + '@turbo/windows-arm64': 2.9.4 tween-functions@1.2.0: {} @@ -16235,16 +16074,22 @@ snapshots: uint8array-extras@1.5.0: {} - unconfig@7.3.3: + unconfig-core@7.5.0: dependencies: - '@quansync/fs': 0.1.5 - defu: 6.1.4 - jiti: 2.5.1 - quansync: 0.2.11 + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + + unconfig@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + defu: 6.1.5 + jiti: 2.6.1 + quansync: 1.0.0 + unconfig-core: 7.5.0 undici-types@6.20.0: {} - undici@7.18.2: {} + undici@7.24.0: {} unicode-properties@1.4.1: dependencies: @@ -16334,11 +16179,10 @@ snapshots: acorn: 8.15.0 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.26.2): + unrun@0.2.34: dependencies: - browserslist: 4.26.2 - escalade: 3.2.0 - picocolors: 1.1.1 + rolldown: 1.0.0-rc.12 + optional: true update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -16475,13 +16319,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-node@3.2.4(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -16496,22 +16340,22 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1): + vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3): dependencies: esbuild: 0.25.0 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@2.3.2) + picomatch: 2.3.2 postcss: 8.5.6 rollup: 4.59.0 tinyglobby: 0.2.15 @@ -16521,12 +16365,12 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 terser: 5.43.1 - yaml: 2.8.1 + yaml: 2.8.3 - vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.12.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 4.0.15(vite@7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.15 '@vitest/runner': 4.0.15 '@vitest/snapshot': 4.0.15 @@ -16537,13 +16381,13 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 2.3.2 std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -16591,7 +16435,7 @@ snapshots: memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 optionalDependencies: webpack: 5.104.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) @@ -16670,10 +16514,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -16759,9 +16599,9 @@ snapshots: yallist@3.1.1: {} - yaml@1.10.2: {} + yaml@1.10.3: {} - yaml@2.8.1: {} + yaml@2.8.3: {} yargs-parser@21.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fd9689f85b0..5917b09c38e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,7 +9,7 @@ catalog: "@atlaskit/pragmatic-drag-and-drop-hitbox": 1.1.0 "@atlaskit/pragmatic-drag-and-drop": 1.7.4 "@bprogress/core": ^1.3.4 - "@dotenvx/dotenvx": 1.51.1 + "dotenv": 16.4.7 "@react-router/dev": 7.13.1 "@react-router/node": 7.13.1 "@react-router/serve": 7.13.1 @@ -19,9 +19,9 @@ catalog: "@types/node": 22.12.0 "@types/react-dom": 18.3.1 "@types/react": 18.3.11 - axios: 1.13.5 + axios: 1.15.0 express: 4.22.0 - lodash-es: 4.17.23 + lodash-es: 4.18.0 lucide-react: 0.469.0 mobx-react: 9.1.1 mobx-utils: 6.0.8 @@ -33,7 +33,7 @@ catalog: tsdown: 0.16.0 typescript: 5.8.3 uuid: 13.0.0 - vite: 7.3.1 + vite: 7.3.2 onlyBuiltDependencies: - turbo